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


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Improver
To : Aleksey Tarasow
Subj : Rexx

> > > Просьба ко всем, запустить скрипт и сообщить, что будет выведено на экран.
> > > ===
> > > /*
> > > */
> > > call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
> > > call SysLoadFuncs
> > >
> > > BDNames='TestTest'
> > > call value 'Base.'BDNames'.Test1', 'Test1 Test2'
> > >
> > > say Base.BDNames.Test1
> > > BDNames=translate(BDNames)
> > > say Base.BDNames.Test1
> > >
> > > exit
> > > ===
> >
> > Вывод:
> > ===
> > BASE.TestTest.TEST1
> > Test1 Test2
> > ===
> > Вполне ожидаемо, т.к. вызов "call value...", также как и translate, преобразует "BDNames" в заглавные.
>
> translate() преобразовывает содержимое переменной, а здесь преобразовываться имя переменой - это немного разные вещи.
>
> Во общем не возражаю, так как Rexx во всей литературе называют "языком регистронезависимым". То есть должно быть полностью фиолетово в каком регистре писать имена переменных, так что преобразовывайте куда угодно.
> А приведенный пример опровергает тезис "регистронезависимости". Что очень не приятно...
>
Хм... Делаем так:
===
/**/
Base.TestTest.Test1='Test1 Test2'
BDNames='TestTest'
say Base.BDNames.Test1
BDNames='TESTTEST'
say Base.BDNames.Test1
===
И на выходе получаем тот же результат. Как видно, регистрозависимыми переменные становятся при подстановке в качестве имени значений из другой переменной. Тоже вполне логично, т.к. REXX все имена переменных преобразует в верхний регистр, а при подстановке значений этого нет. Может и неприятно, но это можно учесть при написании программ.

Mon 17 Oct 2016 23:04 Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox




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.