ABAP中#符号及#()语法的含义是什么?在哪可查询相关资料?
ABAP
#( ) 语法规则说明 你在示例中看到的#( )并不是独立语法单元,是ABAP 7.40版本上线新语法后,构造运算符 + 自动类型推断占位符 + 参数区间的通用组合写法。
示例逻辑对应解释
先对应你给出的代码做说明:
DATA: lv_str TYPE string VALUE 'ABCD'. DATA: dref1 TYPE REF TO data. DATA: dref2 TYPE REF TO data. * 旧语法获取数据引用 GET REFERENCE OF LV_STR INTO dref1. * 新语法获取数据引用 dref2 = REF #( LV_STR ). BREAK-POINT.
这段代码里的REF #(LV_STR),REF是用来生成数据引用的构造运算符,#是类型占位符,括号是参数传入区间。因为赋值号左侧的dref2已经明确定义为REF TO data类型,编译器会自动推断#对应的类型就是data,这句和写全的REF data(lv_str)效果完全一致,和旧语法GET REFERENCE OF的执行结果没有区别。
通用使用规则
#( )不能单独使用,必须前置搭配ABAP支持的构造/转换类运算符,常见的合法搭配包括:REF #( ):生成指定变量的数据引用,即示例中的用法NEW #( ):创建匿名数据对象或类实例,返回对应对象的引用VALUE #( ):直接为基本类型、结构、内表构造赋值CONV #( ):执行数据类型的隐式/显式转换CORRESPONDING #( ):按字段名匹配,在结构、内表间传递映射值
#的自动类型推断仅在上下文目标类型明确时生效:- 赋值语句中左侧变量类型已固定时,
#会自动匹配左侧变量的对应类型 - 调用方法、函数时,如果传入参数位置的形参类型固定,
#会自动匹配形参类型 - 如果上下文没有明确的目标类型(比如直接将
REF #(lv_str)作为WRITE语句的输出项,编译器无法判断目标类型),会直接抛出语法错误,此时必须将#替换为显式类型名,例如写为REF string(lv_str)
- 赋值语句中左侧变量类型已固定时,
- 括号内的参数规则完全由前置的运算符决定,和
#本身无关:例如VALUE #( )构造内表时需要按行结构传入值,NEW #( )创建类实例时需要传入类构造方法的对应参数,REF #( )括号内仅需传入要获取引用的对象即可。
权威说明查询渠道
- ABAP内置关键字文档:在SAP GUI或者ADT(ABAP开发工具)中,将光标放在
REF/NEW/VALUE等对应运算符关键字上,按F1即可调出官方语法说明,包含版本限制、参数规则、合法场景、官方示例,是最准确的一手参考 - SAP官方帮助门户ABAP编程板块:可搜索对应ABAP版本的「构造运算符」「类型推断」相关主题,查看全量语法规范
- ABAP系统自带示例:在开发系统中查找
SABAPDEMOS开发类下的DEMO_740_*系列程序,包含7.40版本后所有新语法的可运行示例,覆盖各类#( )组合的实际用法
内容的提问来源于stack exchange,提问作者Abapito
相关产品推荐
相关产品推荐

