2012-01-20 39 views
7

Tôi đang cố gắng để viết tương đương với VBScript của một hàm tương tự như những gì dưới đây:Trả về Null hoặc Không có gì từ hàm VBScript?

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

    return null; 
} 

Tôi đoán sẽ là dưới đây, ngoại trừ việc tôi không hiểu sự khác biệt giữa Không có gì và Null. Là người gọi, tôi muốn thử nghiệm nếu giá trị trả về được đặt bằng cách sử dụng IsNull() so với 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 

Trả lời

14

Cách chính xác để không trả lại đối tượng là trả lại Nothing và kiểm tra Is Nothing.

VB của Null là giá trị đặc biệt của loại Biến thể/Null. Có các giá trị đặc biệt khác, chẳng hạn như Variant/Empty hoặc Variant/Error. Tất cả đều có sử dụng của họ, nhưng nó không phải là một.

+0

Làm thế nào để InStr thoát khỏi nó? Dường như nó trả về giá trị tương đương .NET của một Nullable . http://www.w3schools.com/vbscript/func_instr.asp – jglouie

+1

@jglouie 'InStr' chấp nhận một' VARIANT' làm tham số của nó, không phải là một đối tượng. Sau đó, nó sẽ kiểm tra 'VARIANT' và cố gắng cung cấp cho bạn những gì bạn mong đợi. Trả về 'Null' nếu toán hạng chuỗi là' Null' là một khái niệm chung rất chuẩn từ cơ sở dữ liệu. Đối với các chuỗi trong VB6 (và VBScript), chúng không phải là đối tượng, chúng không thể là 'Không có gì'. Vâng, chúng có thể, nhưng được gọi là 'vbNullString' và không được phát hiện với' Không có gì'. – GSerg

4

Sử dụng bộ xương chức năng thứ hai. Tránh Null khi đối phó với các đối tượng, vì Abomination Set Assignment.

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

Trong mã mẫu của bạn, đối tượng luôn được Nothing bởi vì đó là hành động cuối cùng. Đây là cách nó nên là:

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

hay:

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

Câu trả lời của GSerg là đúng: bạn nên sử dụng Không có gì. Ngoài ra, để xem một đối tượng có tham chiếu null hay không, hãy sử dụng:

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

Rất tiếc, tôi đã thoát khỏi dòng Chức năng thoát, cảm ơn. Đó không phải là câu hỏi của tôi, nhưng nó sẽ làm rõ bất cứ ai tìm kiếm câu hỏi này. – user1128144

Các vấn đề liên quan