1

我对 Rexx 很陌生,这里是非常基本的东西,我想快速获取数组的最后一个元素。

打开适用于 Windows 的 Object Rexx 4.2.0:

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.(test.0) 像一个 dummy ?

在 Rexx 中找不到更多关于方括号用法的信息:#Reginald's tail expression

所以现在在 z/OS 下我被困在:

temp=test.0
say test.temp
4

4 回答 4

3

您已经找到了问题的答案。

大型机 REXX(z/OS、z/VSE、z/VM)下的唯一方法是您在上面编写的代码:

temp=test.0
say test.temp

可以在复合符号(V2.1 链接)下的 z/OS TSO/E REXX 参考中找到了解 REXX 解释器在做什么的最佳文档。它描述了为什么 test.test.0 不起作用,因为解释器如何处理该行;在这种情况下,它正在寻找一个词干 test.test.0。

请注意,您可以编码

test.test.0 = 0

并且您将拥有一个有效的词干 test.test.0 (尽管在大多数情况下可能没用)。

链接中的下一个主题讨论了词干变量,其中也有很多有用的信息。

我强烈建议您阅读z/OS TSO/E REXX 参考z/OS TSO/E REXX 用户指南(均为 V2.1 链接)。


于 2014-07-31T16:08:58.783 回答
2

Other pure (non-Object) Rexx alternatives:

interpret "say test." || test.0

or

say value("test." || test.0)
于 2014-07-31T16:12:36.973 回答
0

z/OS 上的默认 Rexx 解释器是 Classic Rexx,而不是 OORexx。OORexx尚未移植到 z/OS。

于 2014-07-31T11:48:02.300 回答
0

请记住(至少在 z/OS 中)“.0”变量不会自动更新。例如:

list.1 = 17
list.2 = 12
say 'List.0 is' list.0

将给出“LIST.0”,这是初始化变量的默认值(变量名)。

于 2014-08-04T10:02:40.587 回答