Я работаю над небольшим рельсовым приложением и имею проблему с моделью рубинового ООП. У меня есть следующая упрощенная структура классов.
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
Моя проблема в том, что когда я вызываю add_bar в определении класса Baz, @bar
, по-видимому, не инициализирован, и я получаю сообщение об ошибке, что оператор +
недоступен для nil
. Вызов add_bar
on Foo
напрямую не дает этой проблемы. Почему это и как я могу правильно инициализировать @bar
?
Чтобы понять, что я хочу, я укажу на поведение, которое я ожидал бы от этих классов.
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
Как я мог достичь этого?