在外部Rexx脚本中调用特定函数
我有一个独立运行的Rexx脚本,我希望使用另一个Rexx脚本来调用其中的特定函数。我知道我可以通过call
调用整个外部Rexx文件和内部Rexx函数,但是我能够在外部脚本中调用单个函数吗?下面的例子说明了什么我想做的事:在外部Rexx脚本中调用特定函数
/* REXXA */
say 'hello'
run_test:
say 'test'
...
/* REXXB */
call 'REXXA' /* will say both 'hello' and 'test' */
我怎样才能修改REXXB说只有 '测试'?
编辑:进一步的研究表明我可能正在寻找RxFuncAdd - 任何人都可以确认,如果这与主机Rexx脚本工作?大多数涉及它的参考文献都是关于DLL库的......
编辑2:显然不是...任何人有任何更好的想法?
编辑3:我必须没有适当解释我的要求,比较遗憾的是 - 按下NealB的回应评论,我基本上是想一个类似于调用“数学”类中的“罪”的功能。我写的代码是REXXB,上面的例子中,我想尽可能少地改变REXXA。
直接有没有办法在另一个程序来解决内部的标签。
我的第一个直觉反应是,你将不得不稍微修改REXXA添加一个包装函数与函数的代码,类似
/* REXX A */
arg a1 a2 a3 a4 a5 (etc.)
select
when a1 = 'SIN'
call sin a2 a3 ....
when a1 = 'COS'
call cos a2 a3 ....
end
exit rc
sin:
return some equation involving a2 that I last saw about 33 years ago
cos:
return some equation involving a2 that I last saw about 33 years ago
/* REXX B */
call 'REXXA' 'sin 85'
然而,TSO下REXX不支持外部函数和子程序可以是以多种语言撰写,包括REXX。 TSO/E REXX参考文献External functions and subroutines, and function packages, z/OS V11 flavor描述了如何做到这一点。
在文档中有关于可选编译REXX的说明。如果你没有它,你可能会找到一个可以编译它用于ALTLIB的人(无需许可证)。
您可能可以使用PARSE SOURCE来确定您是单独调用还是由其他Rexx exec调用。我没有这样做,但文档似乎表明它会工作。
关于你以后的编辑:啊,你想写一个在Rexx中的DLL的道德等价物,多个入口点都不是主要的。我不认为有一种方法可以在System z上使用Rexx。
想到的唯一技巧就是拥有一个主要入口点,您将要执行的实际函数的名称及其参数传递给它。主入口点然后将调用指定的函数并返回。 Kludgy,对不起。
cschneid有正确的想法... 下都TSO(z/OS版)和Windows ooRexx以下工作:
REXXA:
/* REXXA */
parse source . as_a .
if as_a = 'COMMAND' then
say 'hello'
run_test:
say 'test'
return
REXXB:
/* REXXB */
call 'REXXA' /* will say 'test' */
return
从TSO或Windows命令行提示符处:键入REXXA
将同时打印hello
和test
。打字REXXB
只会打印test
。
我必须承认,我觉得这个要求有点怪......
感谢您的理解,我可能会过分复杂一点 - 我想尽可能少地改变REXXA,例如,在VB.NET中,如果我有一个名为'math'的类和一个名为'sin'的函数,我可以通过math.sin()从不同的代码调用'sin'...如果我有一堆现有的函数在rexx脚本(即REXXA)中,我可以只从REXXB中调用其中的一个,而不修改REXXA?关键的要求是,'图书馆'(即REXXA或假设的'数学'类)基本保持不变。 – 2012-01-09 22:24:26
谢谢你,那正是我期待的。现有的rexx脚本使用与您的代码类似的概念(它用于解释输入到ISPF面板的命令),所以我会看看是否可以使用它。它已经是EXEC PDS的成员,所以其他解决方案都不适合。 – 2012-01-11 03:02:31
我一直想尝试为REXX构建一个外部函数集,但我从来没有机会。有一天,希望... – zarchasmpgmr 2012-01-13 23:09:29