2012-01-20 97 views
7

我試圖寫的VBScript相當於類似於下面的函數:從VBScript函數返回Null或Nothing?

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

    return 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 

回答

14

的正確方法不是返回一個對象是返回Nothing和測試Is Nothing

VB的Null是Variant/Null類型的特殊值。還有其他特殊值,例如Variant/Empty或Variant/Error。他們都有他們的用途,但它不是那個。

+0

InStr如何逃避它?它看起來像返回一個可空的的.NET等價物。 http://www.w3schools.com/vbscript/func_instr.asp – jglouie

+1

@jglouie'InStr'接受'VARIANT'作爲參數,而不是對象。然後它檢查'VARIANT'並試圖給你你所期望的。如果字符串操作數爲'Null'則返回'Null'是來自數據庫的非常標準的通用概念。至於VB6(和VBScript)中的字符串,它們不是對象,它們不能是「Nothing」。那麼,他們可以,但這就是所謂'vbNullString',並沒有檢測到'沒有'。 – GSerg

4

使用第二個函數框架。由於Set Assignment的憎惡,在處理對象時避免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 
2

在你的示例代碼中,對象獲得總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 
+0

糟糕,我遺漏了Exit Function行,謝謝。這不是我的問題,但它會澄清其他人正在尋找這個問題。 – user1128144