ハッシュをクラス変数として使用すると、奇妙な問題が発生しました。次のコードを実行すると、クラス変数@@class_hash
に{:one => {'a' => 'one'}, :two => {'a' => 'two'}}
.
ただし、このコードを実行すると@@class_hash
、{:one => {'a' => 'two'}, :two => {'a' => 'two'}}
.
何故ですか?
class Klass
@@class_hash = Hash.new({})
def fun1
@@class_hash[:one]['a'] = 'one'
end
def fun2
@@class_hash[:two]['a'] = 'two'
end
def class_hash
@@class_hash
end
end
klass = Klass.new
klass.fun1
h1 = klass.class_hash
raise "h2[:one]['a'] should be 'one', not 'two'" if h1[:one]['a'] == 'two'
klass.fun2
h2 = klass.class_hash
raise "h2[:one]['a'] should be 'one', not 'two'" if h2[:one]['a'] == 'two'