というエラーが出た。AとAなのになぜ…

原因はsort内で比較していた値にnilが入っていたからだったんだけど、特定のケースでエラーメッセージがわかりにくくなるようだった。

エラーじゃない

> nil <=> 1
=> nil

エラーだけどわかりやすい

> [1, nil].sort { |a, b| a <=> b }
ArgumentError: comparison of Integer with nil failed

なぜ…というエラーメッセージになる

> [{ id: 1 }, { id: nil }].sort { |a, b| a[:id] <=> b[:id] }
ArgumentError: comparison of Hash with Hash failed

なるほど。