任何解释这个的Ruby大师?
class Bar
@@x = 10
def self.test
return @@x
end
end
class Foo < Bar
@@x = 20
end
puts Bar.test # 20 why not 10?
puts Foo.test # 20
当我从TextMate运行时。我希望那个
puts Bar.test returns 10
和
puts Foo.test returns 20
但由于某种原因(我很想知道),@ F在Foo中更新Bar as-well,这是超级类。我错过了什么?
答案 0 :(得分:2)
这是可以预料的。类变量在层次结构中共享。请参阅维基百科中的部分:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Variables_and_Constants#Class_Variables
将此与类实例变量进行比较,类实例变量仅适用于该类。
class Bar
@x = 10
def self.test
return @x
end
end
class Foo < Bar
@x = 20
end
Bar.test # => 10
Foo.test # => 20