内联取消引用方法 return 个参数
Inline dereferencing method return parameters
我见过几种 ABAP 标准方法,它们 return 对数据的引用作为结果。
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 )->*.
遗憾的是,这不起作用,因为:
Result type of the functional method "GET_MAX_VALUE" is not an object
reference or an interface reference.
手头的问题是:是否可以直接取消引用此类结果?
每当我确定结果兼容时,我宁愿避免取消引用的旧方法(存储引用,将其分配给字段符号,然后将其放入目标变量):
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>.
对于一个简单的动作来说,这似乎是一个巨大的操作。
方法 GET_MAX_VALUE
returns 类型为 TYPE REF TO DATA
的变量是 "reference to a generic data type".
您不能解引用泛型引用 (*)。
但是,您可以先 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的文档说只有对完整数据类型的引用才能被解引用:
A data reference variable typed in full with TYPE REF TO complete_type
or LIKE REF TO dobj
can be dereferenced in all matching operand positions using the dereferencing operator ->*. If the static data type is structured, the object component selector enables access to the components of the structure with dref->comp.
并且这个 documentation 解释了 complete 数据类型是 "Data type that is not generic."
我见过几种 ABAP 标准方法,它们 return 对数据的引用作为结果。
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 )->*.
遗憾的是,这不起作用,因为:
Result type of the functional method "GET_MAX_VALUE" is not an object reference or an interface reference.
手头的问题是:是否可以直接取消引用此类结果?
每当我确定结果兼容时,我宁愿避免取消引用的旧方法(存储引用,将其分配给字段符号,然后将其放入目标变量):
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>.
对于一个简单的动作来说,这似乎是一个巨大的操作。
方法 GET_MAX_VALUE
returns 类型为 TYPE REF TO DATA
的变量是 "reference to a generic data type".
您不能解引用泛型引用 (*)。
但是,您可以先 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的文档说只有对完整数据类型的引用才能被解引用:
A data reference variable typed in full with
TYPE REF TO complete_type
orLIKE REF TO dobj
can be dereferenced in all matching operand positions using the dereferencing operator ->*. If the static data type is structured, the object component selector enables access to the components of the structure with dref->comp.
并且这个 documentation 解释了 complete 数据类型是 "Data type that is not generic."