

[特定のメソッドのエイリアスがあれば表示する方法](https://ja.stackoverflow.com/questions/35582/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%81%ae%e3%82%a8%e3%82%a4%e3%83%aa%e3%82%a2%e3%82%b9%e3%81%8c%e3%81%82%e3%82%8c%e3%81%b0%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95)

こちらで質問させて頂いたときに`group_by`の同値判定が`==`でも`eql?`でもなく、何か別の物が使われているようだとわかったのですが、何が使われているのか探してもドキュメントが見つかりませんでした。

rubyのソースコードで`def group_by`で検索もしてみたのですがテストコードしか見つかりませんでした…。

<https://github.com/ruby/ruby/blob/202bbda2bf5f25343e286099140fb9282880ecba/test/ruby/test_time_tz.rb#L68>

`group_by`はどのような条件で同一だと判定しているのでしょうか?


CC BY-SA 3.0
2017-06-17T06:15:01.140
35659
2017-06-19T02:32:08.907
3271
question
ruby
group_byの同値判定に使われる比較演算子について


`group_by`はハッシュを組み立てるので使われるとしたら`hash`じゃないでしょうか。

試してみるとこうなりました。

[code]

    irb(main):043:0> a = Object.instance_method(:debugger)
    => #<UnboundMethod: Object(Kernel)#debugger(byebug)>
    irb(main):044:0> b = Object.instance_method(:byebug)
    => #<UnboundMethod: Object(Kernel)#byebug>
    irb(main):045:0> a == b
    => true
    irb(main):046:0> a.eql?(b)
    => true
    irb(main):047:0> a.hash == b. hash
    => false
    irb(main):048:0> Hash.instance_method(:has_key?).hash == Hash.instance_method(:member?).hash
    => true
    
[/code]

なお、[Object#hashのマニュアル](https://docs.ruby-
lang.org/ja/latest/class/Object.html#I_HASH)には

> > A.eql?(B) ならば A.hash == B.hash
>
> の関係を必ず満たしていなければいけません。

という記載がありますが、上記の挙動はこの通りになってないようです


CC BY-SA 3.0
2017-06-19T02:32:08.907
35694
2017-06-19T02:32:08.907
2020-06-17T08:14:45.997
-1
5793
35659
answer