对不起这个基本的ABAP问题。在ABAP中调用方法的不同方法有哪些?他们的“官方”名字是什么?我听说过执行,方法调用和内部/内联方法调用。
执行使用PERFORM关键字和方法调用CALL METHOD语法,我想。但什么是“内部”或“内联方法调用”?
答案 0 :(得分:9)
这些是内联方法调用的可能性。
如果您正在调用所谓的函数方法,它只有IMPORTING参数和可选的一个RETURN参数,您可以像这样调用它。
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
func_meth
IMPORTING
i_param TYPE i
RETURNING
VALUE(r_res) TYPE char1.
ENDCLASS.
l_res = lcl_test=>func_meth( 1 ).
* you could also call it like this
l_res = lcl_test=>func_meth( i_param = 1 ).
* also this variant is possible
l_res = lcl_test=>func_meth( EXPORTING i_param = 1 ).
* the traditional CALL METHOD syntax would be like this
CALL METHOD lcl_test=>func_meth
EXPORTING
i_param = 1
RECEIVING
r_res = l_res.
如果有多个IMPORTING参数,则必须指定参数的名称。
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
func_meth
IMPORTING
i_param1 TYPE i
i_param2 TYPE i
RETURNING
VALUE(r_res) TYPE char1.
ENDCLASS.
l_res = lcl_test=>func_meth(
i_param1 = 1
i_param2 = 2
).
如果方法中有EXPORTING或CHANGING参数,则仍然可以进行内联调用,但必须明确指定参数类别。
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
func_meth
IMPORTING
i_param TYPE i
EXPORTING
e_param TYPE c
CHANGING
c_param TYPE n.
ENDCLASS.
lcl_test=>func_meth(
EXPORTING
i_param = 1
IMPORTING
e_param = l_param
CHANGING
c_param = l_paramc
).
答案 1 :(得分:0)
你已经大量混淆了很多东西。 让我们友善,并从这里开始一些基础知识:
Method是一个类的成员函数的正式名称,意思是,如果你谈论方法,你谈论面向对象的prorgamming(OOP)。 大约有两种或三种方法调用方式,至少在abap中。在您答应我之后,让我们详细介绍一下,如果您决定开发以下OO范例。你应该。
函数只是一个函数,一小段(或大块)代码,可以从多个调用者调用,以便重用。它不是OOP范式,并且自prorgamming开始以来就存在。尽管如此,它还有一个略微“更大”的定义,如果你答应我,请让我们详细讨论这个问题。 你应该,如果你想发展ABAP。
表演? “Perform”是调用表单例程的abap关键字。表格例程是真正的旧学校功能 - 相当于abap,与编程开始时的旧时代功能最相似。 可重复使用的小代码,可以在你的prorgamm的任何地方进行调用,但有时来自其他地方(现在这对你来说太过分了)。
所以,如果你已经将这三个(或者这三个中的两个)混合起来,那么你根本就没有好的位置,谈论内部或内联。 对不起,但事实确实如此。这不是冒犯。
你用其他语言开发过吗?
答案 2 :(得分:0)
祝你好运 - 你会发现这项任务要比预期的要困难得多。例如,ABAP包含一个宏处理工具,很难发现实际的方法调用正在发生。尽管如此,仍会编译的恶意示例:
DATA: l_foo TYPE c LENGTH 32.
DEFINE foo.
l_&4 = cl_&1_&3&5&2&9if_&1_&3&5_&8~&7_&3&5_c&6( ).
END-OF-DEFINITION.
foo system = u foo uid 32 create static >.
您会发现宏在系统的某些部分中被广泛使用。祝你在不使用内置解析器和宏处理器的情况下在这种东西中找到方法调用。