From: Yusuke Endoh Date: 2010-02-04T12:43:19+09:00 Subject: [ruby-dev:40314] [Bug #2679](Open) rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR チケット #2679 が更新されました。 (by Yusuke Endoh) ステータス ClosedからOpenに変更 担当者 Yukihiro MatsumotoからNobuyoshi Nakadaに変更 遠藤です。 rubyspec で delegate のエラーが 5 つ増えました。 tempfile も 10 個くらい失敗するようになったようです。 難しいですね。 翻訳すると、以下のように挙動が変わったようです。 # 1) freeze しても __setobj__ できてしまう $ ./ruby -rdelegate -e ' d = SimpleDelegator.new([1, :foo]) d.freeze d.__setobj__("foo") # 以前はここで例外 p d ' "foo" # 2) frozen? が delegate 元の freeze 状態を返す (これはむしろ改善?) $ ./ruby -rdelegate -e ' p SimpleDelegator.new([1, :foo].freeze).frozen? ' true # 以前は false # 3) SimpleDelegator#method の後で __setobj__ を呼び出してから call できる $ ./ruby -rdelegate -e ' s = SimpleDelegator.new("foo") m = s.method("upcase") s.__setobj__([1,2,3]) p m.call # 以前はここで例外 ' "FOO" # 4) delegate 元の private method が普通に呼び出せてしまう (重大) $ ./ruby -rdelegate -e ' class C def foo p :foo! end private :foo end SimpleDelegator.new(C.new).foo # 以前は例外 ' foo! # 5) delegate 元の private method は以前は send でも呼び出せなかった $ ./ruby -rdelegate -e ' class C def foo p :foo! end private :foo end SimpleDelegator.new(C.new).send(:foo) # 以前は例外 ' foo! -- Yusuke ENDOH ---------------------------------------- http://redmine.ruby-lang.org/issues/show/2679 ---------------------------------------- http://redmine.ruby-lang.org