Приложение 23 февраля, Флориан дает правильный ответ в комментариях: «Я сообщил об ошибке в команду документооборота, и они ответили, что она уже сообщена, и исправили ее в последней версии. Новое утверждение:« Во втором варианте без круглых скобок вызовы методов в цепочке невозможны, а операторы NEW и CAST не могут использоваться.» »
Ниже я приведу свой оригинальный ответ (кстати,Теперь я думаю, что в CALL METHOD static_meth...
термин «вызов автономного метода» относится к части «static_meth», поэтому он относится к двум группам конструкций, поэтому мой ответ неточен, а ответ SAP на 100% правильный)
Как я вижу, в документации говорится, что термин "вызов автономного метода" относится к этим конструкциям (обратите внимание на использование скобок), которые объявлены устаревшими:
CALL METHOD method( ).
CALL METHOD method( 25 ).
CALL METHOD method( a = 1 ).
CALL METHOD method( EXPORTING a = 1 ).
CALL METHOD instance->method( ).
CALL METHOD class=>method( ).
etc.
Термин «автономный вызов метода» не относится к этим конструкциям:
CALL METHOD method.
CALL METHOD method EXPORTING a = 1.
CALL METHOD instance->method.
CALL METHOD class=>method.
etc.
Я полагаю, что CALL METHOD cl->m1( )
относится к первой группе const есть ошибка в документации .
Вероятно, отсутствует , а не , поскольку он должен применяться ко второй группе конструкций (например, CALL METHOD method->method( )
недопустимо).
Заключение от меня: вы должны прочитать: «Если CALL METHOD не используется для автономного вызова метода, цепные вызовы метода невозможны ...»
Заключение от Florian & SAP: В комментариях ниже Florian обратился в службу поддержки SAP и указал, какое именно предложение SAP следует использовать в следующем официальном выпуске документации
ADDENDUM (прочитайте его, если вы ошиблись, считая, что страница документации посвящена «статическим методам», надеюсь, я поясню, что это не так).
Ответы на этот вопрос доказывают, что документация "ВЫЗОВМЕТОД - Статический вызов метода (устарел) " является весьма запутанным .
Название документации: здесь" статический вызов метода "означает " статический вызов методов " не«вызов статических методов» (хотя в других местах это может иметь такое значение).Если бы мы могли добавить круглые скобки в письменном языке, это дало бы эти две возможности, соответственно:
- static (вызов метода) : статический вызов метода (каким бы ни был этот метод)типа «статический» или «экземпляр»; у нас может быть статический вызов метода экземпляра)
- (статический метод) вызов : вызов статического метода
Определения:
- статический вызов : имена классов, интерфейсов или методов «жестко закодированы» как символы в исходном коде, а не текстовые литералы, так что они известныкомпилятором (например,
CALL METHOD class=>method.
).Напротив, динамический вызов означает, что имена передаются через переменные, которые известны только во время выполнения (например, DATA classvar TYPE seoclsname VALUE 'CL_ABAP_TYPEDESCR'. CALL METHOD (classvar)=>(methodvar).
). Эта другая страница документации хорошо показывает, что «вызов статического метода» противоположенчто касается «динамического вызова метода», то никогда не говорит о «статических методах и методах экземпляра», только о «статическом вызове метода» и «динамическом вызове метода». - статический метод : метод, объявленный с
CLASS-METHODS
.Например, статический вызов может быть cl_ixml=>create( )
, а динамический вызов может быть DATA classvar TYPE seoclsname VALUE 'CL_IXML'. CALL METHOD (classvar)=>create
.
Что-то в документации, которая меня тоже смутила, это использование термина «статический метод»и примеры, основанные только на статическом методе, потому что на самом деле страница документации посвящена «статическому вызову», а не статическим методам (могли использоваться методы экземпляра):
- Синтаксис :
CALL METHOD { static_meth( ) | static_meth( a ) | ...
: что означает здесь "static_meth"?На самом деле «static_meth» не означает, что это статический метод, но это любой метод в контексте статического вызова метода .Если вы посмотрите на страницы документации о « статических вызовах » и « динамических вызовах », вы увидите, что синтаксис соответственно static_meth( ) ...
и CALL METHOD dynamic_meth ...
- Пример : статический метод снова используется в трех вызовах, причем все три имеют одинаковое точное значение, но записаны с разным синтаксисом, чтобы продемонстрировать, что первые два вызова устарели, и только третий рекомендуется. Фактически, во всех трех примерах лучше использовать метод экземпляра, чтобы избежать путаницы!