Rexx - использование квадратных скобок
Я совсем новичок в Rexx, здесь очень простые вещи, я хочу быстро получить последний элемент массива.
Откройте Object Rexx 4.2.0 для Windows:
test.0=2
test.1="foo"
test.2="bar"
say test.[test.0]
==> Вывести как хотел:
bar
Я легко догадываюсь, что интерпретатор Open Object Rexx работает. Квадратные скобки нельзя использовать с Rexx в z/OS.
Первое, что пришло мне в голову (не 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), как на пустышку?
Не могу найти больше информации об использовании квадратных скобок в Rexx, чем это: # хвостовое выражение Реджинальда
Так что под z / OS сейчас я застрял с:
temp=test.0
say test.temp
4 ответа
Вы уже нашли ответ на свой вопрос.
Единственный способ использования мэйнфреймов REXX (z/OS, z/VSE, z/VM), как вы написали выше:
temp=test.0 say test.temp
Лучшая документация для понимания того, что делает интерпретатор REXX, может быть найдена в Справочнике по REXX z / OS TSO / E в разделе Составные символы (ссылка V2.1). Он описывает, почему 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).
Другие чистые (необъектные) альтернативы Rexx:
interpret "say test." || test.0
или же
say value("test." || test.0)
Помните, что (по крайней мере, в z/OS) переменная.0 не обновляется автоматически. Например:
list.1 = 17
list.2 = 12
say 'List.0 is' list.0
Даст LIST.0, который является значением по умолчанию (имя переменной) для инициализированной переменной.
Интерпретатор Rexx по умолчанию в z/OS - это классический Rexx, а не OORexx. OORexx не был перенесен в z/OS.