From: Yusuke ENDOH Date: 2010-01-29T01:18:07+09:00 Subject: [ruby-dev:40221] [Bug:trunk] rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR まつもとさん、または lib/delegator.rb についてわかる誰か 遠藤です。 freeze した SimpleDelegator を clone できません。 $ ./ruby -rdelegate -e ' a = [42, :hello] d = SimpleDelegator.new(a) d.freeze d.clone ' /home/mame/work/ruby-trunk-local/lib/ruby/1.9.1/delegate.rb:257:in `__setobj__': can't modify frozen object (RuntimeError) from /home/mame/work/ruby-trunk-local/lib/ruby/1.9.1/delegate.rb:207:in `clone' from -e:5:in `
' これはバグですよね。 lib/delegator.rb の clone の定義を見ると def clone new = super new.__setobj__(__getobj__.clone) new end となっていて、__setobj__ するときにはもう SimpleDelegetor は freeze 状態なのでそりゃそうだという感じなんですが、どう直したものでしょう。 -- Yusuke ENDOH