9
私はScalaでネストされたクラスをパターンマッチングする方法は?
class Person() {
class Room(r: Int, c: Int) {
val row = r
val col = c
override def hashCode: Int =
41 * (
41 + row.hashCode
) + col.hashCode
override def equals(other: Any) =
other match {
case that: Room =>
(that canEqual this) &&
this.row == that.row &&
this.col == that.col
case _ => false
}
def canEqual(other: Any) =
other.isInstanceOf[Room]
}
val room = new Room(2,1)
}
val p1 = new Person()
val p2 = new Person()
println(p1.room == p2.room)
>>> false
いくつかの分析の後、私はScalaはPerson
の各インスタンスのクラスRoom
を再定義し、その2つの部屋が上がらない理由だことがわかった(同じメソッドがProgramming in Scala書物後に書かれている)以下のコードを試してみました同じだ。
問題を解決する可能性は、クラスPerson
の外部にクラスを配置することですが、これは常に最も簡単な方法ではありません。 (例えば、クラスがPerson
のいくつかのパラメータにアクセスしなければならない場合)
等価メソッドを書くための代替手段はありますか?