クラスのインスタンスをuniqで処理する際の振る舞い
特定のクラスのインスタンスのインスタンス変数が全て等しいなら uniq
でまとめてしまいたく調べていたのですがバージョンによって動作が違うのか何が正しいのかわかりませんでした。
こちらの回答によると
https://stackoverflow.com/questions/1650475/removing-identical-objects-in-ruby
class Result
attr_accessor :text, :notes
def initialize(text = nil, notes = nil)
self.text = text
self.notes = notes
end
def ==(other)
other.class == self.class &&
other.text == self.text
end
alias :eql? :==
end
a = Result.new("first")
b = Result.new("first")
c = Result.new("third")
[a, b, c].uniq
# => [a, c]
にて重複分の削除を行えると解説されてるんですが、ruby 2.2.2
を使っている私の環境では3つとも返ってきてしまいます。
a.eql?(b) #=> true
になることは確認できています。
どのようにすればオブジェクトが持つ外部からアクセス可能なインスタンス変数が全て等しい時にuniq
でまとめることができるでしょうか?