ruby-reference-manual:3171
From: "sho-h (Sho Hashimoto)" <sho-h@n...>
Date: Thu, 16 Aug 2012 00:59:36 +0900
Subject: [ruby-reference-manual:3171] [るりまプロジェクト - Bug #6874][Closed] 1.9系での Method と UnboundMethod の #eql? と #hash
Issue #6874 has been updated by sho-h (Sho Hashimoto). Status changed from Open to Closed % Done changed from 0 to 100 ありがとうございます。 Method#eql? を以下のように修正しました。(UnboundMethod#eql? も同様です) * 1.8 系では、Object#eql? のままなので削除(Method#== は定義されているため残した) * 1.9 系では、Method#eql? と Method#== は同じ method_eq(proc.c) のため同一のエントリとした(Method#=== は定義していないため削除) #hash も 1.8 系では削除し、1.9 系では単純に「自身のハッシュ値を返します」としました。 ---------------------------------------- Bug #6874: 1.9系での Method と UnboundMethod の #eql? と #hash https://bugs.ruby-lang.org/issues/6874#change-28897 Author: pypypy567 (py _) Status: Closed Priority: Normal Assignee: Category: Target version: reporter: ruby_version: 1.9系での Method と UnboundMethod の #eql? と #hash http://doc.okkez.net/static/193/method/Method/i/eql=3f.html > 指定された other が self 自身である場合のみ真を返します。これは Object クラスで定義されたデフォルトの動作です。 1.9系では同じオブジェクトから生成された同じメソッドなら真を返すように再定義されているようです。 #hash も再定義され、 object_id とは一致しなくなっています。 #-- testa.rb def foo; end a = method(:foo) b = method(:foo) p [a.object_id == a.hash, a.eql?(b)] > ruby -v testa.rb ruby 1.8.7 (2012-06-29 patchlevel 370) [i386-mingw32] [true, false] ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] [false, true] ちなみに alias してもちゃんと同じメソッドとみなされます。 逆に名前が同じなだけの別メソッドは駄目です。 > ruby -e "def f; end; alias g f; p method(:f).eql?(method(:g))" true > ruby -e "def f; end; a = method(:f); def f; end; p a.eql?(method(:f))" false http://doc.okkez.net/static/193/method/UnboundMethod/i/eql=3f.html 同様に UnboundMethod#hash も再定義されています。 こちらは生成元のインスタンスが異なっても同じメソッドなら true を返します。 #-- testb.rb def foo; end m = method(:foo) a = m.unbind b = m.unbind # 同じ Method オブジェクトから作った UnboundMethod オブジェクト c = Object.new.method(:foo).unbind # a とは receiver も違う p [a.eql?(b), a.eql?(c)] > ruby -v testb.rb ruby 1.8.7 (2012-06-29 patchlevel 370) [i386-mingw32] [false, false] ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] [true, true] -- http://bugs.ruby-lang.org/ -- ML: ruby-reference-manual@m... Info: http://QuickML.com/
3169 2012-08-15 11:31 [redmine@r... ] [るりまプロジェクト - Bug #6874][Open] 1.9系での Method と UnboundMethod の #eql? と #hash -> 3171 2012-08-15 17:59 ┗[sho-h@n... ] [るりまプロジェクト - Bug #6874][Closed] 1.9系での Method と UnboundMethod の #eql? と #hash