|
|
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
Можно ли записать в параметр класса $LB() из самого класса? Что-то вроде: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 10:25 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
Пробовал на Cache for Windows (x86-64) 2007.1.3 (Build 607) Tue Oct 16 2007 23:53:30 EDT Всякая попытка записать в параметр что-то кроме строки или числа подсвечивается сиснтаксисом... Т.ч. если таким вот макаром... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 10:49 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefint , Посмотрите допустимые типы параметров класса, в частности COSEXPRESSION . Пример для 2010.1: Class sql.ru Extends %Persistent { parameter P1 as COSEXPRESSION = "$LISTBUILD(""Red"",""Green"",""Blue"")"; ClassMethod Test() { w $ll(..#P1) // результат - 3 } } Для предыдущих версий код нужно немного изменить: Change In Support For COSEXPRESSION ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 11:18 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
Виталий, спасибо! Вопрос закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 12:04 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
Рано радовался. Ctrl+Shift+V открыл глаза на происходящее Код: plaintext 1. 2. 3. Код: plaintext 1. 2. Использование Код: plaintext 1. Пока сохраняю список во внешней глобали: Код: plaintext 1. 2. 3. 4. 5. С другой стороны, в классе (таблице) %Dictionary.CompiledParameter есть булево поле CompilerGenerated. То есть возможность все таки есть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 15:37 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefint , значение параметра не меняется после компиляции... Интересно что ты там хранить собрался в параметре класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 15:48 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
krvsa, я осознаю что такое параметр класса, и хотел бы хранить там всего лишь строку... Только в формате $LB. Скорее всего это невозможно, иначе будут проблемы при компиляции строк вида w ..#FIELDS Возможно, посыл о построении списка при каждом вызове ложный... Жалко в Студии нет возможности просмотра пи-кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 17:22 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefintхотел бы хранить там всего лишь строку... Только в формате $LB. Скорее всего это невозможно, иначе будут проблемы при компиляции строк вида w ..#FIELDS Почему не возможно? Тебе показали 2 варианта как такое сделать... doublefintВозможно, посыл о построении списка при каждом вызове ложный... Вот тут я ничего не понял... Зачем таки строить список каждый раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 09:50 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
krvsa2 варианта как такое сделать. Скрыть не значит сделать. Создайте класс с параметром любым способом. Скомпилируйте его. Посмотрите, что в хранится в таблице %Dictionary.CompiledParameter поле Default c ID: ИмяКласса||ИмяПараметра. Для параметра c COSEXPRESSION будет сгенерирована метка zИмяПараметраP() , которая, как я подозреваю, будет вызываться, и, соответственно, строить список заново при каждом вызове из других методов. Т.е вопрос о хранении бинарной строки в коде. Можно через выражение ($c(8,9,27) или $LB(1,2,4)), а вот что будет в пи-коде - вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 10:36 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefintСоздайте класс с параметром любым способом. Скомпилируйте его. Посмотрите, что в хранится в таблице %Dictionary.CompiledParameter поле Default c ID: ИмяКласса||ИмяПараметра Так я это и сделал со своим примером... А то как это хранит внутри себя Кашей мне не особо интересно. Сам бы я такой параметр никогда бы не стал делать если чего... Это же твой сон, не мой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 10:51 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
krvsa, понимаю. Это всеобщий тренд - "к черту подробности" :) И на всякий случай учить java ;( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 13:32 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefint , Если Вы хотите сэкономить на операции $lb на этапе компиляции классов, то можно поступить, например, так: Class del.c [ Abstract ] { Parameter p = ""; // аналог $lb(1,2,8) ClassMethod test() { w ..#p,! w $ll(..#p),! ; результат - 3 w $li(..#p,3),! ; результат - 8 } } Но я не уверен в необходимости такой "оптимизации". PPS: использовать макрос ##expression не удалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2011, 11:34 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
servit, да, как вариант, если список не содержит символов с кодами 13,10 и т.п. То, что список зашит в параметре - не принципиально, но удобно Допустим есть метод, в котором основная логика - это прохождение по элементам списка. Метод вызывается часто и является критичным. В варианте по умолчанию он будет строиться каждый раз (утверждать этого не берусь, пи-код не смотрел). Если разместить список в глобали - как узлы глобали или целиком, появляются сомнения, что будет быстрее - построение списка заново или использование "оптимизированной десятилетиями непрерывной эксплуатации в критически важных приложениях системы кэширования доступа к данным" :) Основные способы уже разобрали, осталось проверить экспериментальным путем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2011, 12:10 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
doublefint, если объект долгоживущий то возможно имеет смысл предвычислить параметр во временное поле Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2011, 04:36 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
cache hit , параметр он один и у класса. А поле оно у экземпляра. Разницу улавливаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2011, 09:05 |
|
||
|
параметр класса = $LB()
|
|||
|---|---|---|---|
|
#18+
krvsa, разницу улавливаю. Я предлагаю решение аналогичное решению doublefint (c сохранением в глобал во время компиляции) только без глобала. ЗЫ Да, там кстати нужно ReadOnly поставить вместе с Transient ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2011, 12:04 |
|
||
|
|

start [/forum/topic.php?fid=39&fpage=41&tid=1557717]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 328ms |

| 0 / 0 |
