2012-08-24 30 views
12

Este es un patrón común: si una variable no existe recibo un error undefined local variable or method.¿Cómo verificar si existe una variable con un valor sin "variable o método local indefinido"?

El código existente tiene if variable_name.present? pero esto no tuvo en cuenta la variable que no existe.

¿Cómo puedo verificar el valor de la variable y también explicar que no existe?

que he probado:

if (defined? mmm) then 
    if mmm.present? then 
    puts "true" 
    end 
end 

pero todavía Rubí comprueba que mmm.present? interior y tiros "tal variable" cuando no existe.

Estoy seguro de que hay un patrón/solución común para esto.

Respuesta

21

Cambiar el present?-!= '':

if defined?(mmm) && (mmm != '') then puts "yes" end 
+0

también prestar atención a los operadores de las preferencias y utilizar paréntesis de forma apropiada, en este caso, la segunda parte de la expresión incluye entre paréntesis, pero si usted está mirando una _boolean_ y que no utiliza paréntesis para el 'definido? (Mmm) 'la condición devolvería' verdadero'. Entonces, cuando en una comparación compleja es una buena práctica usar '(defined? (Mmm))' – Asier

1

intento:

if defined?(mm) && !mm.blank? 
    puts "acceptable variable" 
end 

Puede asegurarse de que no obtendrá variable no definida o nulo o valor vacío.

¿Puede usar solo definido? para detectar expired-session-hash, especialmente con hash de nivel profundo.

if defined?(session[:user]['name']) 
    puts "active session" 
else 
    puts "expired session" 
end 
+0

No es fluido en Ruby, pero 3 años después de una respuesta aceptada podría ofrecer información sobre cómo se relaciona con la respuesta existente (s)? Aquí sugiero explicar un poco la adición '.nil'' que podría ser la magia que ahorra el' entonces' y teniendo en cuenta la no existencia. Pero seguramente lo sabrá mejor. Gracias. – Dilettant

Cuestiones relacionadas