【问题标题】:Inline dereferencing method return parameters内联解引用方法返回参数
【发布时间】:2020-05-21 04:20:00
【问题描述】:

我见过几个 ABAP 标准方法,它们返回对数据的引用作为结果。 CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( ) 就是其中一种方法。我的自然倾向是在一行中使用此方法,如下所示:

DATA lv_max_value TYPE i.
lv_max_value = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value )->*.

很遗憾,这不起作用,因为:

函数方法“GET_MAX_VALUE”的结果类型不是对象 引用或接口引用。

手头的问题是:是否可以直接取消引用这些结果?

只要我确定结果是兼容的,我宁愿避免使用旧的取消引用方法(存储引用,将其分配给字段符号,然后将其放入目标变量):

DATA lv_max_value TYPE i.
DATA ref TYPE REF TO data.
FIELD-SYMBOLS <field> TYPE any.
ref = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value ).
ASSIGN ref->* TO <field>.
lv_max_value = <field>.

对于一个简单的动作来说,这似乎是一个巨大的操作。

【问题讨论】:

标签: return-value abap dereference


【解决方案1】:

GET_MAX_VALUE 方法返回一个类型为 TYPE REF TO DATA 的变量,它是“对泛型数据类型的引用”。

您不能取消引用泛型引用 (*)。

但是,您可以先CAST 他们,让 ABAP 知道具体的数据类型,然后取消引用(现在键入的)转换结果。

DATA lv_max_value TYPE i.
lv_max_value = CAST i( cl_abap_exceptional_values=>get_max_value( lv_max_value ) )->*.

(*) TYPES - REF TO 的文档说只有对完整数据类型的引用才能被取消引用:

TYPE REF TO complete_typeLIKE REF TO dobj 完整键入的数据引用变量可以使用取消引用运算符->* 在所有匹配的操作数位置取消引用。如果静态数据类型是结构化的,则对象组件选择器允许使用 dref->comp 访问结构的组件。

这个documentation 解释说,完整数据类型是“非通用数据类型”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多