Pregunta

Sé que algunos decir que las variables de clase (por ejemplo @@class_var) deben ser Evitar en Ruby y deben utilizar la variable de una instancia (por ejemplo @instance_var) en el ámbito de clase en su lugar:

def MyClass
  @@foo = 'bar' # Should not do this.
  @foo = 'bar'  # Should do this.
end

¿Por qué el uso de variables de clase mal visto en Ruby?

¿Fue útil?

Solución

Las variables de clase son a menudo difamados veces debido a sus comportamientos en materia de propiedad confusos:

class Foo
  @@foo = 42

  def self.foo
    @@foo
  end
end

class Bar < Foo
  @@foo = 23
end

Foo.foo #=> 23
Bar.foo #=> 23

Si utiliza variables de instancia de clase en su lugar, se obtiene:

class Foo
  @foo = 42

  def self.foo
    @foo
  end
end

class Bar < Foo
  @foo = 23
end

Foo.foo #=> 42
Bar.foo #=> 23

Esto es a menudo más útil.

Otros consejos

Tenga cuidado; @@variables clase y @variables instancia no son la misma cosa.

En esencia, cuando se declara una clase variable en una clase base, se comparte con todas las subclases. cambiando su valor en una subclase afectará a la clase base y todas sus subclases todo el camino hasta el árbol de herencia. Este comportamiento es a menudo exactamente lo que está deseado. Pero con la misma frecuencia, este comportamiento no es lo que fue la intención de el programador, y conduce a errores, especialmente si el programador no lo hizo Originalmente esperar de la clase que sea una subclase de otra persona.

De: http: // sporkmonger.com/2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top