artbear писал(а) 26. Августа 2008 :: 11:10:artbear писал(а) 26. Августа 2008 :: 09:14:И что за проблема с АссоциативнымВектором ?
ДА, тут интересный прикол - эта коллекция добавляется, в списке свойств вроде как добавленные элементы появляются, хотя вроде как не должны
правда, обращение к ним через контекст роняет 1С
Потом расскажу.
...
Лана, щас расскажу.
Ну, вкратце - я могу сделать точно такую же безопасную коллекцию, но из-за реализации контекстов в 1С доступ по имени свойства будет иметь сложность O(N).
Потому что в итоге приходится находить по имени не просто пару "ключ, значение", а ее номер в коллекции, а это - O(N).
Поэтому использован некий хак, который позволяет решить эту задачу со сложностью const.
Но чем-то приходится жертвовать - и в данном случае - это жестко регламентированный протокол использования методов контекста.
Для ассоциативного вектора нельзя кешировать номера свойств.
Можно только искать свойства через FindProp, а после получать значения через возвращенный дескриптор (а не номер) свойства.
Это прекрасно работает в родном окружении 1С.
Но вот добавить такой контекст через TurboBL увы, не получится.
Да и не велика потеря.
Я только сейчас заметил, что и добавление структуры у меня в Тест2() работает неверно (ну или "весьма своеобразно").
Свойства-то структуры к контексту добавляются, но только те, которые были добавлены к контексту
до добавления контекста структуры.
Но вот дальнейшая вставка свойств уже в контексте не отображается.
Например, нельзя получить свойство структуры "Десять" через контекст.
По крайней мере, до тех пор, пока не будет вызван очередной Accept().
Т.е. добавление полиморфных контекстов к ГК не имеет смысла.
Все равно TurboBL не заточена под поддержку таких контекстов в соединении с ГК.
А вот добавлять что-то статическое, типа первого теста - это должно работать.
Можно даже придумать, когда это действительно будет нужно.
P.S.
Я так и знал, что добавление контекстов - это очередной ящик Пандоры...