1

任何解释这一点的 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

但出于某种原因(我很想知道)Foo 中的@@x 也更新了 Bar,这是超类。我错过了什么?

4

1 回答 1

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
于 2012-08-10T21:18:55.340 回答