? =
- это оператор преобразования (вниз) . Он используется для присваивания между ссылочными переменными, чья возможность присваивания проверяется уже при запуске среды выполнения.
См. Общее объяснение в wikipedia .
Пример:
DATA fruit TYPE REF TO zcl_fruit.
DATA apple TYPE REF TO zcl_apple. " inherits from zcl_fruit
DATA apricot TYPE REF TO zcl_apricot. " inherits from zcl_fruit
...
case fruit->type.
when 'apple'.
apple ?= fruit.
seeds = apple->seeds.
when 'apricot'.
apricot ?= fruit.
seeds = VALUE #( ( apricot->kernel ) ).
endcase.
Начиная с 7.40, оператор конструктора ] CAST
может использоваться:
DATA fruit TYPE REF TO zcl_fruit.
...
case fruit->type.
when 'apple'.
seeds = CAST zcl_apple( fruit )->seeds.
when 'apricot'.
seeds = VALUE #( ( CAST zcl_apricot( fruit )->kernel ) ).
endcase.