Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

17 Май 2022, 04:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3   Вниз
  Печать  
Автор Тема: Странность с пропущенными параметрами.  (Прочитано 3588 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 071


« Ответ #30: 3 Август 2021, 19:47 »

@dokol92, спасибо, я позже посмотрю и протестирую с компьютером (через неделю)
Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 721


« Ответ #31: 3 Август 2021, 19:49 »

Sub Foo(Optional Bar As Boolean)
  If IsMissing(Bar) Then Bar = True
End Sub

Вторая часть условия (Then) никогда не будет выполнена, потому что обращение к отсутствующему параметру автоматически устанавливает его значение в FALSE, и TRUE уже не присвоить.

Тогда подумайте и скажите, пожалуйста, как может быть, что

Цитата:
Function UDF(Optional bPassedStatus As Boolean)

dim bInnerStatus as boolean

   If IsMissing(bPassedStatus) then bInnerStatus = True

   REM Use the bInnerStatus in the next parts of the function...

это и есть абсолютно работающий во всех режимах единственный (простой) вариант использования опциональных переменных в StarBasic – одна переменная для переданного параметра (сам параметр процедуры), а другая для использования в теле после анализа входного параметра*. По другому не так просто, со всеми особенностями.

Ведь до присвоения всё равно не дойдёт.

Разве что это карго-культ по причине того, что
Во всяком случае совет дан старожилом форума.
Записан

С уважением,
Михаил Каганский
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 071


« Ответ #32: 3 Август 2021, 20:17 »

Михаил, чтобы невероятное стало очевидным, есть ещё два режима. Вернусь к этой теме позже
Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 071


« Ответ #33: 10 Январь 2022, 21:30 »

https://git.libreoffice.org/core/+/8e323fcacebad1afe9d867b846722a6b9bf20f78

Всё зависит от режима (их три).
Заметил, что в "родном" режиме (без всяких опций) необязательный параметр не инициализируется значением по умолчанию, это так, но вот если задан тип данных, то он сохраняется. Значит, задание типа данных для необязательных аргументов имеет смысл.

Sub Foo(Optional bStatus As Boolean, Optional nIndex%, Optional nValue&)
   If IsMissing(bStatus) Then bStatus = 2
   Print TypeName(bStatus); "="; bStatus  '<< displays: Boolean=True, not Integer=2

   If IsMissing(nIndex) Then nIndex = True
   Print TypeName(nIndex); "="; nIndex  '<< displays: Integer=-1, not Boolean=True

   If IsMissing(nValue) Then nValue = "string"
   Print TypeName(nValue); "="; nValue  '<< displays: Long=0, not String=string
End Sub

В VBA опциональные параметры, проверяемые функцией IsMissing(), должны иметь тип Variant. В StarBasic - любой.
« Последнее редактирование: 10 Январь 2022, 21:36 от eeigor » Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
Страниц: « 1 2 3   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!