二维码

[基础语法] ABAP动态编程FIELD-SYMBOLS 一般操作

Twilight发表于 2014-04-28 17:31Twilight 最后回复于 2014-04-28 17:31 [复制链接] 3882 0

Field-Symbols:指向一个内存区,可以通过地址访问指定内存区的数据, 是一种dereference(解引用),不是reference(引用),我们常说的指针是reference。

引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。

实例:
  1. DATA:var(10) TYPE c.
  2. FIELD-SYMBOLS <fs> TYPE ANY.  "定义<fs>指向任何类型,不能指向表类型

  3. var = 'Hello'.
  4. ASSIGN var TO <fs>.
  5. WRITE: / <fs>.
复制代码
<fs>指向变量var的内存地址,并解出地址对应的值,所以输出:  Hello,而不是内存地址

更改字段数据:
  1. <fs> = 'World'.
  2. WRITE:/ var.
复制代码
输出:  World

扩展学习:
ABAP字段符号ASSIGN与的内存地址关系

field-symbols一般操作:
  1. DATA: BEGIN OF struc,
  2.          comp1 TYPE c LENGTH 1 VALUE '1',
  3.          comp2 TYPE c LENGTH 20 VALUE 'abcdefg',
  4.       END OF struc,
  5.       comp_value TYPE c LENGTH 10 VALUE 'value',
  6.       comp_name  TYPE c LENGTH 15.

  7. FIELD-SYMBOLS <fs> TYPE ANY.

  8. "指派结构的一个字段给<fs>
  9. ASSIGN struc-comp1 TO <fs>.  WRITE:/ <fs>." 输出:1
  10. "指派结构字段的基地址加上两倍此字段长度的地址给字段符号
  11. ASSIGN struc-comp1 INCREMENT 2 TO <fs>. WRITE:/ <fs>." 输出: b
  12. "指派结构的第二个组件字段给字段符号
  13. ASSIGN COMPONENT 2 OF STRUCTURE struc TO <fs>.  
  14. WRITE:/ <fs>. " 输出:abcdefg

  15. "动态指定字段名
  16. comp_name = 'comp_value'.
  17. ASSIGN (comp_name) TO <fs>. WRITE:/ <fs>. "输出:value
复制代码
通过字段符号与动态字段名称的定义(comp_name),可以在ABAP运行时动态的获取设定变量的数据, 增强程序的灵活性。
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表