[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:3169

From: "pypypy567 (py _)" <redmine@r...>
Date: Wed, 15 Aug 2012 18:31:32 +0900
Subject: [ruby-reference-manual:3169] [るりまプロジェクト - Bug #6874][Open] 1.9系での Method と UnboundMethod の #eql? と #hash


Issue #6874 has been reported by pypypy567 (py _).

----------------------------------------
Bug #6874: 1.9系での Method と UnboundMethod の #eql? と #hash
https://bugs.ruby-lang.org/issues/6874

Author: pypypy567 (py _)
Status: Open
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