Возвращает Null или Nothing из функции VBScript? - PullRequest
9 голосов
/ 20 января 2012

Я пытаюсь написать 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 ]

16 голосов
/ 20 января 2012

Правильный способ не вернуть объект - вернуть Nothing и проверить на Is Nothing.

VB's Null - это специальное значение типа Variant / Null.Существуют и другие специальные значения, такие как Variant / Empty или Variant / Error.Все они имеют свое применение, но это не то.

4 голосов
/ 20 января 2012

Используйте вторую функцию скелета. Избегайте Null при работе с объектами из-за мерзости Set Assignment.

Dim oX : Set oX = getObject(...)
If oX Is Nothing Then
   ...
Else
  nice object to work with here
End If

против

Dim vX : vX = getObject(...) ' <-- no Set, no object
If IsNull(vX) Then
   ...
Else
   no object to work with here
End If
3 голосов
/ 20 января 2012

В вашем примере кода объект всегда получает 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 правильный: вы не должны использовать Nothing.Кроме того, чтобы узнать, имеет ли объект нулевую ссылку, используйте:

If Not object Is Nothing Then
    '  do something
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...