Skip to content

概要

一、什么是 Field Symbol

  Field Symbol由一般字段的占位符(placeholder)或者符号名(symbolic name)定义的。Field Symbol有以下几种特性。

  • 在程序中Field Symbol允许动态访问变量。
  • Field Symbol不占有自己特有的内存空间。
  • Field Symbol的数据名与属性到执行时刻(Runtime)才能确定。
  • Field Symbol 可以指定所有数据对象。
  • 一旦 Field Symbol被分配,则它与一般数据对象没有太大区别。同样可以使用类似
  • 于 MOVE 之类的语句。
  • Field Symbol可以明确指定数据类型,也可以不指定数据类型。若不指定,则会继
  • 承被分配的字段(对象)的数据类型。   下面举个例子进行说明,假设三国演义中魏国的曹操小名为吉利。则曹操就是吉利,古利也就是曹操。图10-1]用这个实例说明一般变量与 Field Symbol 之间的关系。若执行程序,内存地址100里会生成拥有“魏王”值的“曹操”变量。然后分配给Field Symbol,它会创建拥有数据对象的另一个别名的对象。在[图10-11中名为'曹操'的变量还可以叫吉利'。即在程序内“曹操”与“吉利”只是名字不同,其实是使用相同空间的同一个数据对象。若修改Field Symbol的值,则会直接访问存储在内存地址100中的值并修改它。 alt text

二、分配Field Symbol

  定义及分配Filed Symbol开始详细说明Field Symbol的定义与使用方法。在此之前先举一个分别使用数据与 Field Symbol 的实例。如[图 10-2]所示,Field Symbol由FIELD-SYMBOLS 语句定义。在定义的状态下,Field Symbol只会创建指向其他数据对象的指针。执行程序后遇到ASSIGN语句时此指针才会指向数据对象。若修改Field Symbol的值,如图所示,gv_var 变量值则由A 变为 B。 alt text   用程序实现[图 10-2]中说明的内容,如[例10-1]所示。

abap
REPORT z10_01.
DATA : gv_var TYPE C VALUE 'A'
FIELD-SYMBOLS: <fs> TYPE c.

ASSIGN gv var TO <fs>.

<fs> = 'B'.
WRITE : 'gv_var is :', gv_var.

执行结果

abap
gv_var is:B

  变量 gv_var 的值原来是 A,但是 WRITE 结果确认被修改为 B。这是因为 gv_var 变量分配给 Field Symbol,然后将 Field Symbol的值修改成 B而产生的结果。