Синтаксическая ошибка при VALUE при построении строки таблицы из литерала - PullRequest
5 голосов
/ 03 апреля 2019

Вот один для вас.

Почему этот файл не компилируется

REPORT ZZY.

TYPES: my_int TYPE x LENGTH 4,
  my_int_table TYPE STANDARD TABLE OF my_int WITH EMPTY KEY.

DATA(g_tab_my_int) = VALUE my_int_table( ( 2 ) ).

а этот делает?

REPORT ZZY.

TYPES: my_int TYPE x LENGTH 4,
  my_int_table TYPE STANDARD TABLE OF my_int WITH EMPTY KEY.

DATA(g_tab_my_int) = VALUE my_int_table( ( 2 * 1 ) ).

1 Ответ

7 голосов
/ 03 апреля 2019

Документация ABAP для внутренней стороны VALUE dtype|#( line | {LINES OF itab ...} ) говорит:

Если объект данных указан для line, этот объект должен быть совместимым с типом строки.

Если для line указано выражение (встроенная функция, функциональный метод, выражение вычисления, выражение конструктора или табличное выражение), результат выражения должен быть преобразуемым в тип строки .

В вашем примере:

  • "2" - это числовой литерал, то есть объект данных, он действителен только в том случае, если он совместим с типом, т.е. он точно такого же типа.
  • "1 * 2" - выражение, оно допустимо, поскольку существует правило преобразования из типа I в тип X.

Вы можете ввести более короткое выражение, например "+ 2": VALUE my_int_table( ( + 2 ) ).

...