我是Rexx的新手,这里真的是基本的东西,我想快速获得数组的最后一个元素。
Open Object Rexx 4.2.0 for Windows:
test.0=2
test.1="foo"
test.2="bar"
say test.[test.0]
==>按需输出:
bar
我很容易猜到Open Object Rexx解释器正在运行。方括号不能与z / OS上的Rexx一起使用。
我想到的第一件事(没有RTFM):
say test.test.0
say test.(test.0)
==>输出不好:
TEST.TEST.0
5 *-* say test.(test.0)
Error 16 running Test.REX line 5: Label not found
Error 16.1: Label "SYNTAX" not found
是否还有方括号的其他用法? 为什么来自C / Java / Python我会选择test.test.0或者测试。(test.0)就像一个假人?
无法在Rexx中找到有关方括号用法的更多信息,而不是:#Reginald's tail expression
所以在z / OS下我现在坚持:
temp=test.0
say test.temp
答案 0 :(得分:3)
您已经找到了问题的答案。
大型机REXX(z / OS,z / VSE,z / VM)下的唯一方法与上面编码的一样:
temp=test.0 say test.temp
可以在Compound Symbols(V2.1链接)下的z / OS TSO / E REXX参考中找到有关理解REXX解释器正在执行的操作的最佳文档。它描述了为什么test.test.0不起作用,因为解释器如何处理该行;在这种情况下,它正在寻找一个干测试.test.0。
请注意,您可以编码
test.test.0 = 0
你会有一个有效的词干test.test.0(虽然在大多数情况下可能没用)。
链接中的下一个主题讨论了干变量,它也有很多有用的信息。
我强烈建议同时阅读z/OS TSO/E REXX Reference和z/OS TSO/E REXX User's Guide(两个V2.1链接)。
答案 1 :(得分:2)
其他纯(非对象)Rexx替代品:
interpret "say test." || test.0
或
say value("test." || test.0)
答案 2 :(得分:0)
z / OS上的默认Rexx解释器是Classic Rexx,而不是OORexx。 OORexx has not been ported到z / OS。
答案 3 :(得分:0)
请记住(至少在z / OS中)'。''变量不会自动更新。 E.g:
list.1 = 17
list.2 = 12
say 'List.0 is' list.0
将给出'LIST.0',这是初始化变量的默认值(变量名称)。