2012-01-20 11 views
7

Próbuję napisać ekwiwalent VBScript o funkcji podobnej do tego, co poniżej:Powracająca wartość zerowa lub nic z funkcji VBScript?

object getObject(str) 
{ 
    if (...) 
    { 
     return object_goes_here; 
    } 

    return null; 
} 

Moje przypuszczenie byłoby poniżej, z wyjątkiem, że nie jestem zrozumienie różnicy między nic i Null. Jako rozmówca wolę przetestować, czy wartość zwracana jest ustawiona za pomocą IsNull() versus 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 

Odpowiedz

14

Prawidłowy sposób nie zwraca obiekt jest powrót Nothing i testu Is Nothing.

VB's Null to specjalna wartość typu Variant/Null. Istnieją inne specjalne wartości, takie jak Wariant/Pusty lub Wariant/Błąd. Wszystkie mają swoje zastosowanie, ale to nie ten.

+0

Jak InStr uciec z nim? Wygląda na to, że zwraca .NET odpowiednik Nullable . http://www.w3schools.com/vbscript/func_instr.asp – jglouie

+1

@jglouie 'InStr' akceptuje' VARIANT' jako jego parametr, a nie obiekt. Następnie sprawdza "WARIANT" i stara się dać ci to, czego się spodziewałeś. Zwracanie 'Null' jeśli operandem łańcuchowym jest' Null' jest bardzo standardową wspólną koncepcją pochodzącą z baz danych. Jeśli chodzi o ciągi w VB6 (i VBScript), to i tak nie są obiektami, nie mogą być "Nic". Cóż, w pewnym sensie mogą, ale to się nazywa 'vbNullString' i nie jest wykrywany z' Is Nothing'. – GSerg

4

Użyj drugiego szkieletu funkcji. Unikaj wartości Null, gdy masz do czynienia z obiektami, z powodu obrzydliwości ustawienia zadania.

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 
2

w kodzie przykładowym obiektem dostaje zawsze Nothing ponieważ jest to ostatnia akcja. To właśnie powinno być:

Function getObject(str) 
    If ... Then 
     Set getObject = object_goes_here 
     Exit Function 
    End If 
    Set getObject = Nothing 
End Function 

czyli

Function getObject(str) 
    Set getObject = Nothing 
    If ... Then 
     Set getObject = object_goes_here 
    End If 
End Function 

Odpowiedź GSerg jest poprawna: należy użyć Nic. Dodatkowo, aby sprawdzić, czy obiekt ma zerową odniesienia, przeznaczenie:

If Not object Is Nothing Then 
    ' do something 
End If 
+0

Ups, opuściłem linię wyjścia, dzięki. To nie było moje pytanie, ale wyjaśni to każdemu, kto szuka tego pytania. – user1128144

Powiązane problemy