![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отчего ошибка при сравнении Variant?
Cobalt © (2009-04-19 21:02:00)Есть переменная
FWB : Variant;
В конструкторе класса инициализирую её Unassigned
В процедуре перед тем, как обратиться к ней, делаю проверку:
if FWB = Unassigned then
Result := Unassigned
И это сравнение вызывает
raise EVariantInvalidOpError.Create(SInvalidVarOp);
Получается это оттого, что сравнение идет с типом varDispatch.
Возникает вопрос - каковы причины такого поведения?
Почему не возвращать false?
P.S. BDS2007
clickmaker (2009-04-20 11:29:00) [1]> Почему не возвращать false?
VarIsEmpty()
Плохиш (2009-04-20 10:43:00) [2]
> Cobalt © (19.04.09 21:20) [2]
>
> Для особо внимательных:
> Я прошелся по системным модулям до самого места вызова EVariantInvalidOpError
А справку не пробовал по используемым функциям почитать?
Хотя, чегой-то я, реальнокрютыеперцы справок/книжек не читают...
int64 (2009-04-20 09:40:00) [3]Вообще-то, вместо FWB = Unassigned реальные пацаны пишут: VarIsClear(FWB).
Впрочем как и вместо FWB = null -> VarIsNull
Cobalt (2009-04-19 21:20:00) [4]Для особо внимательных:
Я прошелся по системным модулям до самого места вызова EVariantInvalidOpError, и обнаружил, что на любую операцию сравнивания с varDispatch вызывается эксепшн.
Вопрос-то мой об аргументах на такой запрет.
ТД (2009-04-19 21:12:00) [5]
> Result := Unassigned
а подумать после посмотреть?