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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top