Duplicar posible:
What does ||= mean in Ruby?¿Qué significa a || = en el lenguaje Ruby?
¿qué significa la línea de abajo?
a ||= {}
a ||= 1
en irb siempre devuelve la clase de a, como hash, para las dos líneas anteriores. Gracias de antemano.
Duplicar posible:
What does ||= mean in Ruby?¿Qué significa a || = en el lenguaje Ruby?
¿qué significa la línea de abajo?
a ||= {}
a ||= 1
en irb siempre devuelve la clase de a, como hash, para las dos líneas anteriores. Gracias de antemano.
||=
es un operador de asignación, que devuelve el valor asignado. a ||= b
es equivalente a la instrucción a || a = b
, lo que significa que si a
está configurado y tiene algún valor verdadero, entonces permanece igual, de lo contrario toma el valor de b
.
En su ejemplo a
solo se establece una vez, lo que explica el comportamiento que ha notado.
a ||= {}
a ||= 1 // a is still {}
Uso típico que he visto es inicializar variables estáticas, es decir.
class Foo
def self.bar
return @bar ||= {}
end
end
EDIT:
Cabe mencionar que ||=
es un operador de cortocircuito. Esto significa que en el caso de a ||= b
solo habrá una asignación de a = b
. Nunca habrá una asignación de a = a
en el caso de que a
sea no falsa. Esto es un poco pedante, pero es importante en algunos (muy) casos extremos.
Para obtener más información, read the definitive list of ||= threads and pages.
Su ejemplo es una variable de instancia, no una variable estática (o de clase). Eso sería '@@ algo'. [sigue siendo la mejor respuesta :)] –
@Simon Acabo de notar lo mismo. Solucionado ahora (aunque no del todo). –
También se utiliza con frecuencia para verificar-asignar cosas en Hashes (à-la: 'hash [key] || = initial_value', especialmente si lo que quieres hacer a continuación es' hash [key] + = value', que sería error si 'hash [key] .nil?' es true-ish). – Romain
puede leer "a || = {}" de esta manera. Si se define "a", entonces ignore la expresión del lado derecho. De lo contrario, configure "a" igual a la expresión en el lado derecho. En la primera línea, "a" probablemente no esté definido, por lo que la línea establece "a" a la expresión de la derecha que es el hash vacío. En la segunda línea, "a" ya está configurado como {} por lo que está ignorando la expresión de la derecha que tiene un valor de 1.
No se está verificando si a está definido o no, sino que verifica si a es verdadero (por ejemplo, no es falso ni nulo) o no. – Romain
Bueno, para ser más precisos ... ¡está comprobando si "a" es falso, nulo o NO DEFINITIVO y asigna "a" en consecuencia! – RubyFanatic
Derecha, UNDEFINED no es verdad-ish, eso es verdad :) – Romain
@mladen Es cierto, pero personalmente votaría para cerrar la otra pregunta en favor de este. Éste tiene información más actualizada/correcta en la respuesta mejor valorada. –
Duplicado: [¿Qué significa '|| =' en Ruby?] (Http://StackOverflow.Com/q/995593/), [¿Qué significa '|| =' en Ruby?] (Http: // StackOverflow .Com/q/3800957 /), [¿qué es '|| =' en ruby?] (Http://StackOverflow.Com/q/3945711/), [¿Símbolos de tubería dobles en Ruby Variable Assignment?] (Http://StackOverflow.Com/q/4500375/), [¿Qué significa el operando '' || = '" en ruby] (http://StackOverflow.Com/q/5124930/), [Es el operador de ruby '| | = 'inteligente?] (http://StackOverflow.Com/q/2989862/) y probablemente muchos otros también. –
Véase también [La lista definitiva de '|| =' (O iguales) hilos y páginas] (http://Ruby-Forum.Com/topic/151660/). [¿Qué significa '|| =' en Ruby?] (Http://StackOverflow.Com/q/995593/) y [¿Qué significa '|| =' en Ruby?] (Http: // StackOverflow.Com/q/3800957 /) incluso están vinculados a * Preguntas relacionadas *. –