我只是想在Deuian提供的答案上再添加一点内容。我同意,REXX干扰变量是答案。
简单的REXX变量默认为它们自己的名称。例如:
/* REXX */
SAY X
会一直打印 "X" 直到 X
被赋予其他值:
/* REXX */
X = 'A'
SAY X
将打印“ A”。
到目前为止没有什么大的惊喜。干茎变量有些不同。干茎的头部永远不会被评估,只有初始点之后的部分才会被评估。
举个例子:
/* REXX */
X. = 'empty' /* all unassigned stem values take on this value */
A. = 'nil'
B = 'A' /* simple variable B is assigned value A */
X = 'A' /* simple variable X is assigned value A */
SAY X.A /* prints: empty */
X.A = 'hello' /* Stem X. associates value of A with 'hello' */
SAY X.A /* prints: hello */
SAY X.B /* prints: hello */
SAY X.X /* prints: hello */
注意X
和A
这些名称并没有被评估,但是它们后面出现的变量X
和A
被评估了。有些人可能会觉得这有点混淆 - 如果你花点时间去想,它就会变得非常清晰。
Z/OS版本的REXX没有提供一种自然的方式来迭代一个stem变量。最简单的方法是构建自己的索引。例如:
/* REXX */
X. = ''
DO I = 1 TO 10
J = RANDOM(100, 500) /* Random # 100..500 */
X.INDEX = X.INDEX J /* concatinate J's with 1 space between */
X.J = 'was picked' /* Associate 'was picked' with whatever J evalauates to */
END
DO I = 1 TO WORDS(X.INDEX) /* Number of blank delimited 'words' */
J = WORD(X.INDEX, I) /* Extract 1 'word' at a time */
SAY J X.J /* Print 'word' and its associated value */
END
非常简单,但是展示了这个想法。只需确保INDEX
(或任何您选择的名称)用于保存索引名称时,永远不会弹出作为关联值! 如果可能的话,请使用其他变量来保存索引。
最后一点。请注意我的每个示例都以/* REXX */
开头,您可能需要将其作为您在Z/OS下运行的REXX程序的第一行。