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 に答える