ささだです.

 ruby-core のほうで Class#dup すると思った通りの動作にならない,と
いうレポートをもらいました.

class A
   @@a = 'A'
   def a=(x)
      @@a = x
   end
   def a
      @@a
   end
end

B = A.dup
B.new.a = 'B'
p A.new.a #=> 'B'
          #=> 1.8.7 だと 'A'

 ほとんど,Class#dup のことを考えていなかったのですが,この問題は真
面目に取り扱う必要があるでしょうか.例えば,Class#dup はサポートしな
い,というのも手かと思います.やはりこれは必要な機能だ,と真面目に考
えるなら,がらりと内部構造を変更する必要があります.もし必要なら,
1.9.0-3 までに間に合うように変更したいと思います.


 ちなみに,次のような例を試してみたところ,1.8.7 では変なエラーにな
りました.

class A
  Const = 'A'
  def foo
    p Const
  end
end

B = A.dup

class B
  Const = 'B'
end

p A::Const
A.new.foo
p B::Const
B.new.foo  # 1.8.6 以前,1.9.0 'A'
           # 1.8.7 だとエラー.これはバグっぽい.

-- 
// SASADA Koichi at atdot dot net