我正在尝试编写一些测试程序,并且我有一个想法来运行一个过程,并让程序调用调用程序中的内部函数和过程。据我了解,您可以使用RUN x IN y
,其中y是调用堆栈中的任何过程。
但是,我似乎无法找到任何获取调用过程句柄的方法。似乎并没有提升调用堆栈的方法。
我能想到的唯一方法是将调用过程的THIS-PROCEDURE
句柄作为参数传递。它会工作,但似乎相当不优雅。
答案 0 :(得分:2)
你快到了。使用THIS-PROCEDURE:INSTANTIATING-PROCEDURE手柄,看一下下面的例子。
INSTANTIATING-PROCEDURE属性
返回实例化对象的过程的句柄。
parentProgram.p
RUN childProgram.p.
PROCEDURE hello:
DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
MESSAGE "Child says:" pcMessage VIEW-AS ALERT-BOX INFORMATION.
END.
childProgram.p
MESSAGE "Calling parent. Anybody home?" VIEW-AS ALERT-BOX.
IF VALID-HANDLE(THIS-PROCEDURE:INSTANTIATING-PROCEDURE) THEN
RUN hello IN THIS-PROCEDURE:INSTANTIATING-PROCEDURE (INPUT "I am your child") NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
MESSAGE "That didn't work" VIEW-AS ALERT-BOX ERROR.
END.
答案 1 :(得分:0)
要获取调用过程的句柄,请使用SOURCE-PROCEDURE句柄。它具有 last 过程调用的句柄。如果运行另一个过程,那么它将更改为匹配该过程实例的句柄,因此如果您需要程序记住谁调用它,您的代码将需要在调用它时立即存储该值。