Ruby,类变量和继承?超级类@@ var得到改变?

时间:2012-08-10 21:05:18

标签: ruby

任何解释这个的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,这是超级类。我错过了什么?

1 个答案:

答案 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