ABAP 指针
FIELD-SYMBOLS 定义
在 ABAP 编程中 FIELD-SYMBOLS 使用非常广泛,类似于指针,可以指代任何变量。
FIELD-SYMBOLS 是现有数据对象(或现有数据对象的一部分)的占位符或符号名称,由语句 FIELD-SYMBOLS 声明。内存区域在程序运行时分配给 FIELD-SYMBOLS。
字段符号,顾名思义,就是“符号”。 换句话说,它是一个类似于链接或快捷方式的图像,指向其他变量、结构和内部表。它是指向数据对象(例如变量或结构)的符号
FIELD-SYMBOLS不会像数据对象那样在程序的数据区域中保留物理空间。相反,它用作内存区域的动态名称,特定数据对象或对象的一部分位于该内存区域中。可以在语句的操作数位置使用字段符号代替数据对象。当执行这种类型的语句时,必须在处理内部表时通过语句 ASSIGN
或添加 ASSIGNING
为 FIELD-SYMBOLS 分配内存区域。
FIELD-SYMBOLS几乎可以指向任何数据对象。FIELD-SYMBOLS 等同于使用 ->*
取消引用的数据引用变量。与数据引用变量不同,值语义用于访问字段符号访问字段符号就像访问命名数据对象(或对象的一部分)。然而,对于数据引用变量,引用语义适用。
语法格式
FIELD-SYMBOLS 的实现既用于数据对象的通用工作,也用于数据对象的显式转换。
语法格式:
FIELD-SYMBOLS: <fs_tab> type standard table,
<fs_wa> type mara.
当不输入 <type>
时,<fs> 继承赋给它的变量的所有属性
当输入 <type>
时,赋给它的变量必须与 <fs> 同类型。
FIELD-SYMBOLS: <F1>.
DATA : DAT(8) VALUE '20221222'.
ASSIGN DAT TO <F1>.
WRITE:/ <F1>.
注意,这里定义了 <f1>
之后,使用 assign .. to ..
,将变量分配给内部字段<f1>,这时 <f1>
才继承了 DAT 日期类型的属性及值。
又比如:
DATA: var TYPE i VALUE 2.
FIELD-SYMBOLS: <fs_num> TYPE i.
ASSIGN var TO <fs_num>.
WRITE: / <fs_num>.
<fs_num> = 4.
WRITE: / var.
输出: 2 和 4.
分配指针
Field-Symbols 默认是 unassigned
,这意味着它们指向什么都没有。如果访问未分配的 Field-Symbol 将导致异常,如果未被捕获,将导致短转储。因此,应该在使用前用 IS ASSIGNED
检查状态:
IF <FS_EXAMPLE> IS ASSIGNED.
**Your code
ENDIF.
因为它们只是引用,所以内部不能存储真实资料。因此,在每种使用情况下都需要声明 DATA。
DATA: w_name TYPE string VALUE `Max`,
w_index TYPE i VALUE 1.
FIELD-SYMBOLS <fs_name> TYPE any.
ASSIGN w_name TO <fs_name>. "<fs_name> now gets w_name
<fs_name> = 'Manni'. "Changes to <fs_name> now also affect w_name
* As <fs_name> is generic, it can also be used for numbers
ASSIGN w_index TO <fs_name>. "<fs_name> now refers to w_index.
ADD 1 TO <fs_name>. "w_index gets incremented by one
取消分配
有时重置 Field-Symbol 会很有用。这可以使用 UNASSIGN 来完成。
UNASSIGN <fs>.
* Access on <fs> now leads to an exception again
用于内表
Field-Symbols 可用于修改內表。
LOOP AT itab INTO DATA(wa).
* Only modifies wa_line
wa-name = 'Leo'.
ENDLOOP.
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
* Directly refers to a line of itab and modifies its values
<fs>-name = 'Leo'.
ENDLOOP.
- 点赞
- 收藏
- 关注作者
评论(0)