標準マップ (scala) を使用してセット ラッパーを実装しました。ここで、equals (および hashCode) を再定義するときに、セット ラッパーを含むコレクションで参照の等価性、つまり「eq」を使用する必要があります。ただし、正規マップに使用するコレクションでは、実際の「等しい」を使用する必要があります。私は次の解決策を思いつきました:
override def equals(obj: Any) =
obj match {
case o: SetWrapper => (o eq this) || o.set == this.set
case _ => false
}
私の質問は、これが本当に必要ですか?
(o eq this) || o.set == this.set
またはこれを使用するのに十分ですか?
override def equals(obj: Any) =
obj match {
case o: SetWrapper => o.set == this.set
case _ => false
}
ライブラリは等号を呼び出す前に自動的に「等号」を実行すると推測していますが (== を使用する場合)、よくわかりません。