2012-01-20 18 views
7

estoy tratando de escribir el equivalente de VBScript de una función similar a lo que está a continuación:¿Devolviendo nulo o nada de la función VBScript?

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

    return null; 
} 

creo que ha de estar por debajo, excepto que no estoy entendiendo la diferencia entre la nada y nulo. Como persona que llama, preferiría probar si el valor de retorno se establece usando 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 

Respuesta

14

La forma correcta de no devolver un objeto es volver Nothing y prueba para Is Nothing.

VB's Null es un valor especial de tipo Variant/Null. Hay otros valores especiales, como Variante/Vacío o Variante/Error. Todos tienen su uso, pero no es el indicado.

+0

¿Cómo se puede InStr salirse con la suya? Parece que devuelve el equivalente .NET de un Nullable . http://www.w3schools.com/vbscript/func_instr.asp – jglouie

+1

@jglouie 'InStr' acepta un' VARIANT' como su parámetro, no como un objeto. A continuación, examina el 'VARIANT' e intenta darte lo que esperabas. Devolver un 'Null' si un operando de cadena es' Null' es un concepto común muy estándar que proviene de las bases de datos. En cuanto a las cadenas en VB6 (y VBScript), no son objetos de todos modos, no pueden ser 'Nothing'. Bueno, en cierto modo pueden, pero eso se llama 'vbNullString' y no se detecta con' Is Nothing'. – GSerg

4

Utilice la segunda función del esqueleto. Evita Nulo cuando se trata de objetos, debido a la abominación Establecer asignación.

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

En el código de ejemplo, el objeto se pone siempre Nothing porque esa es la última acción. Esto es lo que debería ser:

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

o:

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

La respuesta de GSerg es correcta: se debe utilizar nada. Además, para ver si un objeto tiene una referencia nula, use:

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

Vaya, dejé fuera la línea de Función de salida, gracias. Esa no era mi pregunta, pero aclarará a cualquier persona que busque esta pregunta. – user1128144

Cuestiones relacionadas