Возврат 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