[oodisc] OOo Basic - динамические переменные: как правильно описать и использовать
Alexej Kryukov
akrioukov на newmail.ru
Вт Янв 25 23:18:50 MSK 2005
On Tuesday 25 January 2005 17:37, Орлов Владислав wrote:
>
> Это все работает. И результат выдает. Но рождает кучу вопросов:
> 1.Будет ли это работать всегда? Не сломается ли на оооочень большом
> массиве? Ведь никаким явным образом мусор за собой не убирается. Или
> End Sub уже достаточно, чтобы почиститься за собой?
Чувствуется, что Вы никогда не имели дела с MS VB(A) :)
Локальные переменные в Бейсике существуют только внутри процедуры,
где были объявлены, и только пока она выполняется. Если Вам
вдруг в порядке исключения понадобилась статическая переменная,
то ее и объявлять надо как Static.
> 2.Если в строках, помеченных ' ?????!!!! убрать слово New, все
> продолжает работать ? то есть в дерево включаются новые элементы. А
> откуда для них берется память?
Использование New в данном контексте вообще некорректно: VBA выдал
бы ошибку. Пользовательская структура -- это ведь не объект в
строгом смысле, т. к. потребный размер известен заранее, так что
память выделяется при декларации, как для встроенных типов.
Да и вообще это New в OOo Basic больше для совместимости, т. к.
отсутствует основная сфера его употребления, которая, как я
понимаю, связана с пользовательскими классами.
> 3.В makeTree оператор ?Dim newEl? срабатывает при каждом входе в
> процедуру. То есть, создается куча пустышек, из которых будет
> задействована только последняя? Или не создается?
Поскольку Вы ее вызываете рекурсивно, то -- да, конечно, создается.
А как же иначе? Не нравится -- объявляйте переменную как Static.
> 4.Должен ли я явно создавать и удалять объекты? Или Бэйсик делает это
> все сам?
Что он там делает -- бес его знает, но, во всяком случае, стандартных
способов удаления объекта не предусмотрено. Впрочем, как я сказал,
локальные переменные уничтожаются автоматически по завершении
процедуры.
> Те примеры кода, которые уже просмотрел (?Useful Macro
> Information For OpenOffice By Andrew Pitonyak?, The Original
> Documentation is http://www.pitonyak.org/AndrewMacro.sxw ), содержат
> строки типа CreateObject(...),
Фрагмент с CreateObject () -- это образец обращения к OOo из VB.
OOo Basic такого оператора не знает, вместо него надо использовать
CreateUnoService ().
> но они все относятся к каким-то
> "com.sun.star.чего-то-там"... Или это самое "чего-то-там" содержит
> готовое решение всех моих задач и я опять изобретаю велосипед?
Посредством таких имен вида "com.sun.star.чего-то-там" можно
обращаться к элементам объектной модели OOo: создавать
инстанции, а потом как-то их использовать.
> 5.В окне контрольных значений можно увидеть только значение отдельной
> переменной. Существует ли простой способ отслеживать значения типа
> newEl.Val напрямую (без предварительного переприсвоения временной
> переменной)?
Не пробовал, ибо, к стыду своему, привык использовать
примитивный способ отладки путем вставки во все подобающие и
неподобающие места операторов MsgBox :)
P.S. Пожалуйста, пишите в кодировке KOI8 и не начинайте новую тему
нажатием кнопки "ответить". А то я, собравшись отвечать на Ваше
письмо, с трудом откопал его среди заведомо мусорного треда.
--
Regards,
Alexej Kryukov <akrioukov at newmail dot ru>
Moscow State University
Historical Faculty
Подробная информация о списке рассылки Oo-discuss