Pracuję nad małą aplikacją szyn i mam problem z modelem OOP ruby. Mam uproszczoną strukturę klas.Inicjowanie zmiennych instancji klas w 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
Mój problem jest teraz, że gdy zgłoszę add_bar w definicji klasy Baz, @bar
najwyraźniej nie inicjowany i pojawia się błąd, że +
operator nie jest dostępny dla nil
. Wywołanie add_bar
na Foo
bezpośrednio nie daje tego problemu. Dlaczego tak jest i jak mogę poprawnie zainicjować @bar
?
Aby wyjaśnić, czego chcę, wskażę zachowanie, jakiego oczekuję od tych klas.
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
Jak mogę to osiągnąć?
+1 ładnie odpowiedział –
Wygląda na to, że tory 2.3. *, Które muszę użyć, nie mają funkcji class_attribute w ActiveSupport, ale class_inheritable_accessor wydaje się robić dokładnie to, co chcę, więc używam tego teraz. Dzięki za wskazówkę. – HalloDu