我知道有人说在Ruby中应该避免使用类变量(例如@@class_var
),而应该在类范围中使用实例变量(例如@instance_var
):
def MyClass
@@foo = 'bar' # Should not do this.
@foo = 'bar' # Should do this.
end
为什么在Ruby中使用类变量不受欢迎?
答案 0 :(得分:27)
类变量经常受到诽谤,因为它们有时会对继承行为造成混淆:
class Foo
@@foo = 42
def self.foo
@@foo
end
end
class Bar < Foo
@@foo = 23
end
Foo.foo #=> 23
Bar.foo #=> 23
如果您使用类实例变量,则得到:
class Foo
@foo = 42
def self.foo
@foo
end
end
class Bar < Foo
@foo = 23
end
Foo.foo #=> 42
Bar.foo #=> 23
这通常更有用。
答案 1 :(得分:6)
小心;类@@variables
和实例@variables
不是一回事。
基本上,当你宣布一个班级时 基类中的变量,它是共享的 与所有子类。改变它 子类中的值会影响 基类及其所有子类 一直到继承树。 这种行为通常就是这样 期望。但同样经常,这个 行为不是预期的 程序员,它导致错误, 特别是如果程序员没有 原本期望上课 由其他人划分。
来自:http://sporkmonger.com/2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby