Возврат Null или Nothing из функции VBScript?
Я пытаюсь написать эквивалент VBScript функции, подобной приведенной ниже:
object getObject(str)
{
if ( ... )
{
return object_goes_here;
}
return null;
}
мое предположение было бы ниже, за исключением того, что я не понимаю разницы между Nothing и Null. Как вызывающий абонент, я бы предпочел проверить, установлено ли возвращаемое значение с помощью IsNull()
и X Is Nothing
.
Function getObject(str)
If ... Then
Set getObject = object_goes_here
Exit Function
End If
Set getObject = Nothing // <-- or should this be Null?
End Function
3 ответов
правильный способ не возвращать объект-вернуть Nothing
и тест для Is Nothing
.
пользователи Null
- специальное значение типа Variant / Null. Существуют и другие специальные значения, такие как Variant/Empty или Variant/Error. Они все имеют свое применение, но это не тот.
используйте второй скелет функции. Избегайте Null при работе с объектами из-за мерзости присвоения набора.
Dim oX : Set oX = getObject(...)
If oX Is Nothing Then
...
Else
nice object to work with here
End If
vs
Dim vX : vX = getObject(...) ' <-- no Set, no object
If IsNull(vX) Then
...
Else
no object to work with here
End If
в вашем примере кода, объект получает всегда Nothing
потому что это последнее действие. Вот как это должно быть:
Function getObject(str)
If ... Then
Set getObject = object_goes_here
Exit Function
End If
Set getObject = Nothing
End Function
или:
Function getObject(str)
Set getObject = Nothing
If ... Then
Set getObject = object_goes_here
End If
End Function
ответ GSerg правильный: Вы ничего не должны использовать. Кроме того, чтобы узнать, имеет ли объект нулевую ссылку, используйте:
If Not object Is Nothing Then
' do something
End If