我只是想对 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 不提供自然的迭代方式
一个词干变量。最简单的方法是建立自己的索引。
例如:
/* 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 程序的第一行。