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


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

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

Мысль интересная...
Improver, предложил передавать данный в параметрах и разбирать возврат. Там свои трудности.
Что у меня сейчас получается:
1. В настоящий момент сложилась ситуация, когда в процедуры передаются только минимум необходимых данных, или текущие данные. Основой для обменная данными служат глобальные переменные, доступ к которым в обязательном порядке прописывается ВСЕМ процедурам. Они как берут от туда данные, так и пишут туда.
2. Так же как правило процедуры (не все) ни чего не знают о передаваемых в них данных (кроме системообразующих). То есть процедуры получаются в некой степени универсальными. Как это выглядит. Есть общая глобальная переменная "base.", её можно сравнить с понятие "куча" в паскале. Так же существую узко специализированные глобальные переменные, общим числом около 10 (например, для возврата запроса из базы данных по умолчанию используется глобальная переменная "SQL."). Если нужно передать в процедуру данные в виде массива, то он создается на основе переменной "base.", например "base.test.". И передается это имя нужной процедуре. Для того что бы процедура могла разобраться с тем что её передали создаем обязательную системную переменную "base.test.structure", где через пробел перечисляем имена всех переменных массива (пример: "base.test.structure='test1 test2 test3'" ). Имея эти два параметра (преданный и обязательный) процедура в состоянии провести в цикле те или иные действия над данными. Где это можно использовать: при загрузке/выгрузке данных, при выводе на экран и т.п. Все это справедливо и для возврата. Данный подход позволил мне сократить листинги процентов на 20-30.

То есть воспользоваться предложением Improver, проблематично, так как мы можем не знать вообще ни чего о данных и их структуре (например, процедура сделала запрос данных из базы, и просто передала возврат следующей процедуре). А ваше предложение с цифрой в начале имени, возможно, но требует ввода жесткой дисциплины наименования переменных. Что весьма проблематично (дисциплина вообще вещь довольно сложная).

Thu 26 Feb 2015 17:27 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.