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


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

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

Кроме того, мне кажется, что передавать в подпрограммы имена переменных в качестве аргумента -- как-то не по-рексовски... Нет, в REXX так тоже можно, но вот зачем такой огород городить? Лучше уж передавать значения и использовать по-максимуму локальные переменные, тогда будет легче локализовать ошибки, и коллапса не будет. Применительно к твоему примеру в начале ветки, я бы сделал как-то так:
=======
/**/
call testproc
parse value RESULT with test.structure ',' test.tabtype ',' test.structure1 ',' test.tabtype1
say 'test.structure='test.structure
say 'test.tabtype='test.tabtype
say 'test.structure1='test.structure1
say 'test.tabtype1='test.tabtype1
exit

testproc: Procedure
StructureX='test1'
TabTypeX='COM'
t.Structure = StructureX
t.TabType = TabtypeX
t.Structure1 = StructureX
t.TabType1 = TabtypeX
return t.structure','t.tabtype','t.structure1','t.tabtype1
=======

Кстати, использовать переменную RC в виде "value rc'.Structure'" и т.п. я бы тоже не рекомендовал, т.к. в неё в REXX записывается код возврата после вызова внешних программ, можешь потом получить ещё одну неожиданную багу...

Tue 24 Feb 2015 22:25 Mozilla/5.0 (OS/2; Warp 4.5; rv:17.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.