Duplicar posible:
What does ||= mean in Ruby?¿Qué significa || = en Ruby?
¿Qué significa ||=
en Ruby?
Duplicar posible:
What does ||= mean in Ruby?¿Qué significa || = en Ruby?
¿Qué significa ||=
en Ruby?
Se utiliza principalmente como un formato abreviado para inicializar una variable a un valor determinado, si aún no se ha establecido.
Piensa en la declaración como return x || (x = y)
. Si x
tiene un valor (que no sea false
), va a calificar con certitud sólo el lado izquierdo de la ||
(ya ||
cortos circuts), y x
no serán reasignados. Sin embargo, si x
es false
o nil
, se evaluará el lado derecho, que establecerá x
en y
, y y
(el resultado de una declaración de asignación es el lado derecho).
Consulte http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case para obtener más información.
+1 se olvidó –
'x || = y' actúa como' x = y a menos que x' que (si suponemos x e y significan expresiones arbitrarias y no necesariamente variables) es * no * lo mismo que cualquiera de 'x = x || y' (considere los casos donde 'x = x' no es un no-op) o' x = y si x.nil? '(considere el caso donde x es falso). – sepp2k
Jorg W Mittag reconoce que esto es incorrecto, en [su respuesta] (http://stackoverflow.com/questions/995593/what-does-mean-in-ruby) a la pregunta duplicada. –
La idea es la misma que con otros operadores similares (+=
, *=
, etc):
a ||= b
es a = a || b
Y este truco no se limita sólo a Ruby: que pasa por muchos idiomas con raíces C.
editar para repeler a los detractores.
Vea uno de los enlaces de Jörg para una aproximación más precisa, por ejemplo this one.
Esto es exactamente por lo que no me gusta Ruby: nada es lo que parece.
Notablemente, no C o C++ o Java. – SingleNegationElimination
@TokenMacGuy Me refiero a 'truco' general: producir 'a @ = b' desde 'a = a @ b'. –
Esto está mal. Por favor, lea http://Ruby-Forum.Com/topic/151660 y los enlaces proporcionados en el mismo. –
x ||= y
se utiliza a menudo en lugar de x = y if x == nil
Maldición, no pude encontrar nada cuando busqué. – ben