2012-06-21 27 views
5

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?

+0

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

+1

Symbolhound es útil para buscar cosas como esta. –

Respuesta

2

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 

CodePad

+0

Gracias - Entendí que @ eran variables de instancias, pero todavía soy bastante nuevo para Ruby. – sdasdadas

+0

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

+0

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

1

@@ identifica una variable de clase.

+0

Gracias, Google hizo que encontrar esta respuesta sea un poco difícil. – sdasdadas

1

@@ 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.

Cuestiones relacionadas