RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Странная ситуация с разименованием в Rexx


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Aleksey Tarasow, 2:5053/57, librexx.ru azimut21.ru azimut64.ru
To : Improver
Subj : Странная ситуация с разименованием в Rexx

> > > > Налетел на такую проблему:
> > > Ошибка в том, что в подпрограмме используешь локальные переменные "Structure" и "TabType", а потом их же используешь, как часть переменной "test.", при этом там, фактически, вместо "Structure" и "TabType" подставляются их значения. Это какая фишка REXX...
> > Даже не смотря на то что ему прямо сказали, что как часть переменной "test." подставляем текст? Всегда считал, что при использовании value не происходит разименования имени. А сейчас выходит, что записи вида value rc'.Structure' и value rc'.'Structure эквиваленты. Печалька...
>
> Не совсем так, эти команды не будут эквивалентны. Если там ставишь имя в кавычках, то ищется переменная с этим именем и подставляется её значение, а если без кавычек, то берётся значение переменной в качестве имени и ищется по нему... Если не понятно изложил, то вот что пишется в примере в доках:
>
> /* После: K=3; fred='K' */
> VALUE('fred') -> 'K' /* ищет FRED */
> VALUE(fred) -> '3' /* ищет K */
> VALUE(fred,5) -> '3' /* и устанавливает K=5 */
> VALUE(fred) -> '5'
>
> Да и ошибка вылезает не в них, тут несколько другой ньюанс, например, выполнение команд:
> -------
> test.asd = '123456'
> asd = 'dsa'
> say test.asd
> -------
> выведет на экран строку 'TEST.dsa', а не цифры... В общем, пока не ушёл в бесконечную рекурсию, пытаясь в этом разобраться, просто поменяй имена переменных. :-)
Уже поменял. Правда скрепя сердцем, так как ряд имен у меня возведен в стандарт тут получается его нарушение. Ну да ладно, назовем это расширением :)

Я боюсь другого, так как я не по сути не контролирую содержание ряда переменных (просто использую то что в них есть), может наступить ситуация когда переменная содержит текст в виде имени самой себя или имя другой критичной переменной (или ещё чего нибудь критичного). Вот тогда способна наступить хрень. Пока рассчитываю избежать коллапса за счет написания присвоения вида value rc'.Structure'. Но вопрос в целом требует отдельной проработки.


Sun 22 Feb 2015 12:57 Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.