IsMissing

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

IsMissing

Сообщение drronnie » 13.10.2005 (Чт) 21:15

Господа, как проверить были ли переданы в функцию аргументы ByRef? Например ситуация: в функцию передаются два из трёх параметров (x, y, z). В зависимости от переданных параметров функция определяет третий и пишет его в аргумент....
IsMissing работает только с Variant
Шо робить?
Компиляция - перевод словесного поноса в машинный код.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.10.2005 (Чт) 21:29

Проверить, был ли передан параметр, возможно только для типа Variant.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.10.2005 (Пт) 6:10

tyomitch писал(а):Проверить, был ли передан параметр, возможно только для типа Variant.

Жаль. А то у меня в редакторе есть одна процедура с одним обязательным параметром и тремя опцональными. И я долго думал почему же при опускании опциональных параметров проверка IsMissing всё равно даёт результат False и параметр воспринимается как полученный.
Т.е. с опциональными параметрами других типов (кроме Variant) IsMissing не пойдёт. Так?

Как тогда поступать? Ведь работа с Variant не всегда удобна (тем более в скорости).
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.10.2005 (Пт) 7:37

Ruslan Demidow писал(а):Т.е. с опциональными параметрами других типов (кроме Variant) IsMissing не пойдёт. Так?


Так, но можно значением по умолчанию для параметра задать то число, которое этот параметр в реале не может получить, например, для hWnd это 0. И обрабатывать это дело...

Ruslan Demidow писал(а):Как тогда поступать? Ведь работа с Variant не всегда удобна (тем более в скорости).


Ну если ты вызываешь свою функцию миллион раз в цикле, то разницу в скорости заметишь. А вообще - см выше или передавай параметр...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.10.2005 (Пт) 8:18

Для строк можно указывать Optional ByRef Arg1 As String = vbNullChar и сравнивать его с нулл-символом. Для чисел -- использовать 0 или -1, в зависимости от условий работы. Т.е. как сказал Andrey Fedorov.
Lasciate ogni speranza, voi ch'entrate.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.10.2005 (Пт) 9:57

Andrey Fedorov, alibek - а если булево?
Например процедура (чисто теоретическая)

Код: Выделить всё

Sub CreateMessage(ByVal sText, Optional blnNew as Boolean, _
            Optional blnCrossPost as Boolean, Optional Forward as Boolean)
   If IsMissing(blnNew) then
      If Not IsMissing(blnCrossPost)
         '... Делаем действия при кросспосте сообщения
      End If
      If Not IsMissing(blnForward)
         '... Делаем действия при форварде сообщения
      End If
   Else
      '... Делаем действия при сохранении отредактированного сообщения
   End If
End sub


Задавать по умолчанию явно не присущие булеву значения?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 14.10.2005 (Пт) 10:02

Ну, во-первых, не совсем правильно для ситуации, когда нужно делать выбор из трех альтернатив, использовать Boolean-переменную. :D Во-вторых, в данном случае явно ничего не изменится, если ты этот параметр объявишь как Variant.
Быть... или не быть. Вот. В чём вопрос?

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.10.2005 (Пт) 10:14

uhm, ясно.
Просто я хотел обойтись без кучи вложенных условий (у себя в проекте) только одной проверкой на наличие или отсутсвие переданного параметра.
Видимо не судьба. Буду переделывать..
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.10.2005 (Пт) 10:33

Ruslan Demidow писал(а):Andrey Fedorov, alibek - а если булево?


Значит сделай его Integer.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.10.2005 (Пт) 11:31

Andrey Fedorov писал(а):
Ruslan Demidow писал(а):Andrey Fedorov, alibek - а если булево?


Значит сделай его Integer.

Ок. Попробую. Спасибо.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 14.10.2005 (Пт) 18:43

Ага а можно ещё сделать булевские неопциональные аргументы соответственно для каждого опционального, и в них писать ИСТИНА, если мы передали аргумент, а ЛОЖЬ если не передали
Код: Выделить всё
Private Function ExampleFunction (ByVal blnFirstArgument as Boolean, ByVal blnSecondArgument as Boolean, ByVal blnThirdArgument as Boolean, Optional ByVal intFirstArgument as Integer, Optional ByVal intSecondArgument as Integer, Optional ByVal intThirdArgument as Integer)
End if

:D :D :D

А такой вопрос.... можно в VB объявить функцию с произвольным количеством аргументов? Не передавать ей массив, а именно с произвольным количеством аргументов?
Компиляция - перевод словесного поноса в машинный код.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.10.2005 (Пт) 18:46

Ищи в хелпе ParamArray
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88

    TopList