RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > > Просьба ко всем, запустить скрипт и сообщить, что будет выведено на экран. > > > > === > > > > /* > > > > */ > > > > 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 все имена переменных преобразует в верхний регистр, а при подстановке значений этого нет. Может и неприятно, но это можно учесть при написании программ.
_, __, _, __,
/_\ |_) /_\ |_)
| | | | | | \
~ ~ ~ ~ ~ ~ ~
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.