ABAP 新语法 - corresponding

在 ABAP 中,CORRESPONDING 操作符用于根据字段名称自动映射结构体(Structure)或内表(Internal Table)的字段值。它比传统的 MOVE-CORRESPONDING 语句更灵活,支持更多控制选项。

基础用法

data: begin of ls_person,
        name type string,
        age  type i,
      end of ls_person.

data: begin of ls_target,
        name type string,
        age  type i,
      end of ls_target.

ls_person-name = 'John'.
ls_person-age = 18.

ls_target = corresponding #( ls_person ).
write: / ls_target-name, ls_target-age.
  • 功能:将 source 中与 target 同名字段的字段值复制到 target
  • 要求:源和目标字段名称相同且类型兼容。

高级用法

  1. MAPPING 子句用于字段名称不同时的显式映射。
target = CORRESPONDING #( source MAPPING target_field = source_field ... ).

示例:

data: begin of ls_source,
        firstname type string,
        birthdate type d,
      end of ls_source.

data: begin of ls_target,
        name type string,
        dob  type d,
      end of ls_target.

ls_source-firstname = 'Alice'.
ls_source-birthdate = '19900101'.

ls_target = corresponding #( ls_source mapping name = firstname dob = birthdate ).
write: / ls_target-name, ls_target-dob.

2. EXCEPT 子句排除不需要映射的字段。

target = CORRESPONDING #( source EXCEPT field1 field2 ... ).

3. BASE 子句保留目标变量的现有值,仅覆盖映射的字段。

target = CORRESPONDING #( BASE (target) source ).

示例:

data: begin of ls_source,
        firstname type string,
        birthdate type d,
      end of ls_source.

data: begin of ls_target,
        name type string,
        dob  type d,
      end of ls_target.

ls_source-firstname = 'Alice'.
ls_source-birthdate = '19900101'.

ls_target-name = 'Bob'.
ls_target-dob = '20000101'.

" name = 'Alice'(覆盖),dob = '20000101'(保留)
ls_target = corresponding #( BASE ( ls_target ) ls_source mapping name = firstname ).
write: / ls_target-name, ls_target-dob.

与 MOVE-CORRESPONDING 的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值