我们需要在 FM 启动时清除导出参数吗?
Do we need to clear an export parameter at FM start?
我找到了这段代码:
FUNCTION /FOO/BAR.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(IV_XYZ) TYPE STRING
*" EXPORTING
*" VALUE(EV_RESULT_JSON) TYPE STRING
*"----------------------------------------------------------------------
*-- Initialization
clear ev_result_json.
需要clear ev_result_json
吗?
No
因为退出FM后会被清除
抱歉没看清楚。答案仍然是否定的。因为刚进入FM后Export Value里什么都没有
是或否。
否 因为它是按值传递的参数(VALUE(EV_RESULT_JSON)) 所以它的起始值总是初始值。
如果它是通过引用传递那么答案可能是是因为它的起始值是传递的参数的值,所以它取决于功能模块的算法。
PS:个人而言,在按值传递参数的情况下,我有时更喜欢在处理开始时添加一个CLEAR,以方便使用"jump"按钮重新启动调试处理;在通过引用传递参数的情况下,我有时会在 "document" 未使用输入值的事实中添加一个 CLEAR。
1小时后补遗:因为EXPORTING参数的逻辑不是很明显,而且因为推荐使用ABAP Objects(尽可能),所以最好把功能模块变成功能方法用RETURNING始终按值传递的参数,因此不会有任何混淆。
我找到了这段代码:
FUNCTION /FOO/BAR.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(IV_XYZ) TYPE STRING
*" EXPORTING
*" VALUE(EV_RESULT_JSON) TYPE STRING
*"----------------------------------------------------------------------
*-- Initialization
clear ev_result_json.
需要clear ev_result_json
吗?
No
因为退出FM后会被清除
抱歉没看清楚。答案仍然是否定的。因为刚进入FM后Export Value里什么都没有
是或否。
否 因为它是按值传递的参数(VALUE(EV_RESULT_JSON)) 所以它的起始值总是初始值。
如果它是通过引用传递那么答案可能是是因为它的起始值是传递的参数的值,所以它取决于功能模块的算法。
PS:个人而言,在按值传递参数的情况下,我有时更喜欢在处理开始时添加一个CLEAR,以方便使用"jump"按钮重新启动调试处理;在通过引用传递参数的情况下,我有时会在 "document" 未使用输入值的事实中添加一个 CLEAR。
1小时后补遗:因为EXPORTING参数的逻辑不是很明显,而且因为推荐使用ABAP Objects(尽可能),所以最好把功能模块变成功能方法用RETURNING始终按值传递的参数,因此不会有任何混淆。