[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