ILE RPG程序变量值可以在调用之间保留在内存中吗?

mik*_*ike 0 rpgle ibm-midrange

如果我使用DFTACTGRP创建一个ILE RPG程序(*NO),我的理解是程序保留在内存中,直到激活组被销毁.如果我在关闭LR的情况下退出程序,那么下次调用时变量会重新初始化还是保持它们的值?

jma*_*phy 7

简短回答
否,它们不会重新初始化,除非ACTGRP(*New)已设置或您以其他方式回收激活组.

长答案 *INLR是RPG循环的一个功能,而不是激活组的功能,并且只要您使用循环主程序,它应该主要按预期运行(程序未卸载除外).对于线性主程序,所有投注均已关闭.该手册说明在线性模块中可能没有"指定"依赖于循环的特征.文档没有明确指出*INLR在线性模块中无法正常工作,但是,您需要知道*INLR与循环相关联,并且线性模块不包括循环.线性模块是使用MAINor NOMAIN关键字的模块.很明显,还有其他控制变量初始化以及(或代替)的东西LR.

如果使用ACTGRP(*NEW),则在程序启动时创建新的激活组,并在程序结束时隐式结束.因此,无论LR是打开还是关闭,程序都会关闭,甚至程序是循环主程序还是线性主程序.

如果使用命名的激活组,或者ACTGRP(*CALLER)调用者在命名的激活组中运行,并在激活组中的所有程序都结束时手动回收激活组,则将初始化字段.RCLRSC这里没有任何影响.

如果您使用默认激活组,或者ACTGRP(*CALLER)调用者在默认激活组中运行,并且手动运行RCLRSC,则将初始化字段.RCLACTGRP这里没有任何影响.小心,这可能会导致问题.

最后,这一切都只适用于全局范围内的变量.局部范围变量(在子过程中定义的变量)总是在输入时初始化,并在返回时释放,除非它们被定义为静态.静态局部变量的行为类似于全局变量.也就是说,它们在程序的第一次调用期间被分配和初始化,并且在调用期间持续存在.