ООП-транслятор: отображение типов - плыву...
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Вт Ноя 19, 2013 10:09  ООП-транслятор: отображение типов - плыву... |
|
Полезность: Нет оценки
|
Здравствуйте.
В нашем словаре есть некий класс [FOND_FILTER].
Галочки 'может иметь экземпляры' и 'Использовать доступ к экземплярам' - НЕ стоят. Стоит флажок 'Структура'.
PL-plus код:
Код: | procedure MyExecute (
P_FOND1 ::[FOND_FILTER],
P_FOND2 [FOND_FILTER] ) is |
Транслируется в
Код: | procedure MYEXECUTE(P_FOND1 IN number,P_FOND2 IN Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) is |
С моей делитантской точки зрения:
1) [FOND_FILTER] и ::[FOND_FILTER] - одно и то же. Озадачила различная трансляция
2) Т.к. у класса НЕ стоит галочка 'может иметь экземпляры', то трансляция в number смысла НЕ имеет. Почему бы сразу не транслировать в структуру?
Еще вопросы к профи:
1) Как гарантированно описать параметр функции с типом структура ( в моем случае - с типом Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) ?
2) На последних версиях поведение транслятора такое же? Страшновато - вдруг потом код перестанет работать |
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Вт Ноя 19, 2013 11:00  Re: ООП-транслятор: отображение типов - плыву... |
|
Полезность: 1
|
Damir пишет: |
С моей делитантской точки зрения:
1) [FOND_FILTER] и ::[FOND_FILTER] - одно и то же. Озадачила различная трансляция
|
[FOND_FILTER] и::[FOND_FILTER] это разное. Первое - структура, второе - ссылка на статический экземпляр.
Пример есть в файле PLPHINTS.TXT из поставки ТЯ
Цитата: | Пример:
v1 [AC_FIN]; -- собственно тип [AC_FIN]
v2 ref [AC_FIN]; ссылка на [AC_FIN]
v3 ::[AC_FIN]; -- выражение для ссылки на статический экземпляр [AC_FIN]
|
Damir пишет: |
2) Т.к. у класса НЕ стоит галочка 'может иметь экземпляры', то трансляция в number смысла НЕ имеет. Почему бы сразу не транслировать в структуру?
|
Отсутствие структуры не мешает иметь поле ID
Damir пишет: |
Еще вопросы к профи:
1) Как гарантированно описать параметр функции с типом структура ( в моем случае - с типом Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) ?
|
[FOND_FILTER]
Damir пишет: |
2) На последних версиях поведение транслятора такое же? Страшновато - вдруг потом код перестанет работать
|
На последних так же. |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Вт Ноя 19, 2013 11:11  Re: ООП-транслятор: отображение типов - плыву... |
|
Полезность: Нет оценки
|
Спасибо!
Доходчиво и оперативно
Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'. |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Ср Ноя 20, 2013 06:02  Re: ООП-транслятор: отображение типов - плыву... |
|
Полезность: Нет оценки
|
Damir пишет: | Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'. |
Таки выскажу свое субъективное мнение.
Это уже к делу не относится - просто мысли вслух...
Оператор '::' в С++ имеет смысловую нагрузку 'область видимости'.
Так я им и пользовался - для указания 'глобальной' области видимости.
Т.е. если в некотором классе я заведу реквизит [AC_FIN], то в операции этого класса будет тяжело отличить реквизит [AC_FIN] от класса [AC_FIN]. Использование '::' для указания, что это является (глобальным) типом было бы уместно.
Для объявления "ссылки на статический экземпляр" - ну если это "ссылка на экземпляр" то логично было бы в объявлении видеть "ref" и еще как-то помечать 'особенность' экземпляра (статичность).
Варианты могут быть различные:
v3 ref static [AC_FIN];
v3 ref [AC_FIN]::;
Да и запрос
select ac(ac) in ::[AC_FIN] where ac%id =999
отрабатывает сейчас правильно (интерпретирует :: как область видимости) - не к статическому экземпляру обращается. |
|
 |
danzki Участник - экстремал
Вступление в Клуб: 30.09.2010
|
Ср Ноя 20, 2013 08:28  Re: ООП-транслятор: отображение типов - плыву... |
|
Полезность: Нет оценки
|
Damir пишет: | Damir пишет: | Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'. |
Таки выскажу свое субъективное мнение.
Это уже к делу не относится - просто мысли вслух...
Оператор '::' в С++ имеет смысловую нагрузку 'область видимости'.
Так я им и пользовался - для указания 'глобальной' области видимости.
Т.е. если в некотором классе я заведу реквизит [AC_FIN], то в операции этого класса будет тяжело отличить реквизит [AC_FIN] от класса [AC_FIN]. Использование '::' для указания, что это является (глобальным) типом было бы уместно.
Для объявления "ссылки на статический экземпляр" - ну если это "ссылка на экземпляр" то логично было бы в объявлении видеть "ref" и еще как-то помечать 'особенность' экземпляра (статичность).
Варианты могут быть различные:
v3 ref static [AC_FIN];
v3 ref [AC_FIN]::;
Да и запрос
select ac(ac) in ::[AC_FIN] where ac%id =999
отрабатывает сейчас правильно (интерпретирует :: как область видимости) - не к статическому экземпляру обращается. |
в этом суровом мире много всякой необъяснимой фигни, это одна из них... архаизм и не более.
стоит это принять, запомнить и использовать, каждый раз чертыхаясь.  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|