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