group_byの同値判定に使われる比較演算子について


[特定のメソッドのエイリアスがあれば表示する方法](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`はどのような条件で同一だと判定しているのでしょうか?




`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
>
> の関係を必ず満たしていなければいけません。

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

