Como estoy navegando a través de un código fuente de Rails, que contiene la línea:¿Qué significa @@ en Ruby?
@@autoloads = {}
¿Qué significa @@
en Ruby?
Como estoy navegando a través de un código fuente de Rails, que contiene la línea:¿Qué significa @@ en Ruby?
@@autoloads = {}
¿Qué significa @@
en Ruby?
Significa acceder a una propiedad de clase (un nombre de propiedad espaciado a la clase), no a una instancia (una propiedad que existe para cada objeto instanciado de esa clase).
En su ejemplo, el @@autoloads
persistirá durante la duración de su programa.
class TestObj
@@prop = 0
def get_prop
@@prop
end
def increment_prop
@@prop += 1
end
end
a = TestObj.new
b = TestObj.new
a.increment_prop
puts b.get_prop # 1
Gracias - Entendí que @ eran variables de instancias, pero todavía soy bastante nuevo para Ruby. – sdasdadas
Una cosa a tener en cuenta es que las variables de clase en una clase principal son * no * heredadas por las clases secundarias. He conocido a muchos nuevos Rubyistas que fueron un poco por eso. – x1a4
Las variables de clase se heredan ('@@ ...'), pero las variables de clase * instancia * ('@ ...') son exclusivas de cada clase, independientemente de la jerarquía. También recibirá advertencias "no inicializadas" sobre las variables de clase que nunca suceden con las variables de instancia. – tadman
@@ identifica una variable de clase.
Gracias, Google hizo que encontrar esta respuesta sea un poco difícil. – sdasdadas
@@ no es más que indicar una variable de clase.
Una variable de clase es una variable que se comparte entre todas las instancias de una clase. Esto significa que solo existe un valor de variable para todos los objetos instanciados de esta clase.
Otra forma de pensar al pensar en variables de clase es como variables globales dentro del contexto de una clase única.
solo quiero agregar, el consenso general es favor de las variables de instancia de clase sobre las variables de clase. http://thinkrelevance.com/blog/articles/2006/11/16/use-class-instance-variables-not-class-variables – Dty
Symbolhound es útil para buscar cosas como esta. –