2009-05-20 15 views
22

En JavaScript hay una forma útil de probar una variable que nunca se ha definido en un punto determinado. Por ejemplo, el siguiente fragmento de código volverá cierto si la variable Bob no se ha definido:Prueba de variables indefinidas en Ruby a la JavaScript?

typeof(bob)=='undefined' 

¿Cómo llevar a cabo la misma prueba en Ruby?

editar: Estoy buscando una prueba que sea igualmente compacta en naturaleza. He llegado a algunas aproximaciones incómodas usando excepciones y cosas así, ¡pero esas no son muy bonitas!

Respuesta

43
defined?(variable_name) 

irb(main):004:0> defined?(foo) 
=> nil 
irb(main):005:0> foo = 1 
=> 1 
irb(main):006:0> defined?(foo) 
=> "local-variable" 

Aquí hay una buena write up en él.

+0

heheh, que habría sabido que iba a ser tan fácil. Estaba haciendo cosas como: prueba comenzará = does_not_exist rescate NameError "indefinido" finales –

+0

interesante que se define? blah devuelve nil y no falso y devuelve una cadena de tipo si está definido –

+0

. Hay algunas otras opciones como object.instance_variable_defined? (: var_name). Buscar en los documentos para definido? y encontrarás las versiones más específicas. – jshen

8

defined? es una función que devuelve nil si el elemento no está definido.

defined? somevar 
=> nil 
somevar = 12 
defined? somevar 
=> "local-variable" 

Así:

if defined?(somevar) 
    do_something 
end 
3

Tenga en cuenta que define? devuelve una cadena si la variable está definida, nula si no es así, por lo tanto, use la verificación condicional de sus resultados. Creo que la sintaxis alude que devolvería un valor booleano.

+0

Cierto, pero dado que 'nil' es falsey y todas las cadenas son ciertas , puede tratar los valores de retorno como booleanos para todos los propósitos de control de flujo (if, elsif, a menos que, while, until, etc). – rampion

-1

También se puede probar de esta manera.

if somevar.nil 
     # not set do something 
    else 
     # is set do something else 
    end 
+0

No. "nil" e "indefinido" significan dos cosas diferentes. –

+0

si está definido? (Variable_to_test) == nil pone "variable_to_test está definido" demás pone "variable_to_test se define" final => variable_to_test no está definido variable_to_test = "" si está definida? (Variable_to_test) = = nil pone "variable_to_test no está definido" demás pone "variable_to_test se define" final se define => variable_to_test parece que debe haber una manera más fácil? – Greg

+0

Lo siento, intenté volver a publicar con el formato correcto y fallé. Luego – Greg

0

Todos los casos de uso:

defined? ur_variable 
=> nil 

ur_variable= 12 
defined? ur_variable 
=> "local-variable" 

another_variable = nil 
defined? another_variable 
=> "local-variable" 
Cuestiones relacionadas