【发布时间】:2011-06-21 12:49:29
【问题描述】:
我正在开发一个小型 Rails 应用程序,但 ruby 的 OOP 模型存在问题。我有以下简化的类结构。
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
我现在的问题是,当我在 Baz 的类定义中调用 add_bar 时,@bar 显然没有初始化,并且我收到一个错误,即 + 运算符不适用于 nil。直接在Foo 上调用add_bar 不会产生此问题。为什么会这样?如何正确初始化@bar?
为了明确我想要什么,我将指出我期望从这些类中获得的行为。
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
我怎样才能做到这一点?
【问题讨论】:
标签: ruby-on-rails ruby oop