Сегодня я столкнулся с интересной проблемой:
При сортировке массива хэшей происходит сбой с ошибкой comparison of Hash with Hash failed
. Пример:
h1 = {a:1, b:2}
h2 = {a:1, b:3}
[h1, h2].sort ArgumentError: comparison of Hash with Hash failed
Теперь странная вещь состоит в том, что и ==
, и eql?
преуспевают нормально.
h1==h2
=> false
h1.eql?(h2)
=> false
Что еще более странно, так это то, что сортировка массива завершается успешно, если хэши совпадают:
h1= {a:1, b:2}
h2= {a:1, b:2}
[h1, h2].sort
=> [{:a=>1, :b=>2}, {:a=>1, :b=>2}]
Я предполагаю, что сортировка массива не использует eql?
внутри. Что он использует? Любое объяснение, почему это происходит?