You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:57:23