Estoy trabajando en una aplicación de rieles pequeños y tengo un problema con el modelo OOP de ruby. Tengo la siguiente estructura de clase simplificada.Inicializando variables de instancia de clase en Ruby
class Foo
protected
@bar = []
def self.add_bar(val)
@bar += val
end
def self.get_bar
@bar
end
end
class Baz < Foo
add_bar ["a", "b", "c"]
end
Mi problema ahora es que cuando llamo add_bar en la definición de clase de Baz, @bar
aparentemente no es inicializado y me sale un error que el operador +
no está disponible para nil
. Llamar al add_bar
en Foo
directamente no produce este problema. ¿Por qué es eso y cómo puedo inicializar @bar
correctamente?
Para aclarar lo que quiero, señalaré el comportamiento que esperaría de estas clases.
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
¿Cómo puedo lograr esto?
+1 muy bien contestado –
Parece que los rieles 2.3. *, Que tengo que usar, no tienen la característica de atributo de clase en ActiveSupport, pero class_inheritable_accessor parece hacer exactamente lo que quiero, entonces lo estoy usando ahora. Gracias por el consejo. – HalloDu