Pergunta
Sou muito novo no Rexx, coisas realmente básicas aqui, quero obter o último elemento de um array rapidamente.
Abra o Object Rexx 4.2.0 para Windows:
test.0=2
test.1="foo"
test.2="bar"
say test.[test.0]
==> Saída conforme desejado:
bar
Meu palpite é que o interpretador Open Object Rexx está funcionando.Colchetes não podem ser usados com Rexx no z/OS.
A primeira coisa que me veio à mente (não RTFM):
say test.test.0
say test.(test.0)
==> Saída não é boa:
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
Existem outros usos de colchetes?Por que vindo de C/Java/Python estou indo para test.test.0 ou test.(test.0) como um manequim?
Não é possível encontrar mais informações sobre o uso de colchetes no Rexx do que estas: Expressão da cauda de #Reginald
Então, no z/OS, por enquanto, estou preso a:
temp=test.0
say test.temp
Solução
Você já encontrou a resposta para sua pergunta.
A única maneira no mainframe REXX (z/OS, z/VSE, z/VM) é conforme você codificou acima:
temp=test.0 say test.temp
A melhor documentação para entender o que o interpretador REXX está fazendo pode ser encontrada na Referência z/OS TSO/E REXX em Símbolos Compostos (ligação V2.1).Descreve por que test.test.0 não funciona, devido à forma como o intérprete lida com a linha;neste caso, ele está procurando por um radical test.test.0.
Observe que você poderia codificar
test.test.0 = 0
e você teria um radical test.test.0 válido (embora provavelmente inútil na maioria dos casos).
O próximo tópico do link discute variáveis-tronco, que também contém muitas informações úteis.
Recomendo fortemente a leitura tanto do Referência z/OS TSO/E REXX e a Guia do usuário do z/OS TSO/E REXX (ambos links V2.1).
Outras dicas
Outras alternativas Rexx puras (não-objeto):
interpret "say test." || test.0
ou
say value("test." || test.0)
O interpretador Rexx padrão no z/OS é Classic Rexx, não OORexx.OORexx não foi portado para z/OS.
Tenha em mente que (pelo menos no z/OS) a variável '.0' não é atualizada automaticamente.Por exemplo.:
list.1 = 17
list.2 = 12
say 'List.0 is' list.0
Fornecerá 'LIST.0', que é o valor padrão (o nome da variável) para uma variável inicializada.