Тема: New FC/2 out!
Показать сообщение отдельно
  #39  
Старый 30.10.2016, 02:31
Roman Trunov
Guest
 
Сообщений: n/a
По умолчанию Rexx

Roman Trunov написал(а) к Aleksey Tarasow в Oct 16 23:44:24 по местному времени:

Нello Aleksey!

Вылетевшее из головы важное дополнение к предыдущему тексту.

RT> Для третьего случая (забытое fields="Masha") лекарства нет, кроме как
RT> аккуратности - или проверять, чтобы "средние" части стемов имели уникальные
RT> имена, или заносить в них то что надо непосредственно перед использованием.

Так как же быть, если мы хотим использовать стем как структуру? Допустим, в языке C можно безбоязненно написать:

field.name="test";
field.width=25;

А вот в REXX, если перед этим мы случайно определили переменные "name" или "width", мы поздороваемся с очень большими граблями. Писать каждый раз перед использованием 'name="NAME"' или 'drop name' тоже быстро надоест.

Но кое-какое решение есть. Больше похожее на хак, но тем не менее. Дело в том, что в REXX в именах переменных можно использовать не только обычные буквы-цифры, но и некоторые спецсимволы. Гарантированно работают знак восклицания и знак вопроса. Да-да, можно написать

!something = 1

И это будет переменная с таким именем. Выглядит дико непривычно. Поэтому можно взять за правило никогда не применять такие переменные в основной программе. Зато ими можно называть элементы стемов! Т.е. пишем так:

field.!name = "test"
field.!width = 25

И порядок. Поскольку мы никогда не объявим !name и !width в основной программе, ключ для стема всегда будет неинициализированной переменной, значение которой есть ее имя в верхнем регистре, т.е. наши операторы всегда преобразуются в

field{"!NAME"} = "test"
field{"!WIDTН"} = 25


Roman

--- GoldED+/W32 1.1.0
Ответить с цитированием