ケースクラスの同等性は、そのプライマリコンストラクター属性にのみ基づいていますvar
(val
そうです、ケースクラスコンストラクター引数が持つ暗黙のオーバーライドvar
を明示的に指定することでそれらを作成できます)。aの本体にプロパティを追加しても影響はありません。コンパイラーが生成したメソッド。var
val
case class
equals(other: Any)
目撃者:
package rrs.scribble
object CCVarEq
{
case class CC1(i: Int, j: Float, var k: Double)
case class CC2(i: Int, j: Float, var k: Double) {
var l = math.Pi
}
def show {
val cc11 = CC1(1, 2.0f, 3.0)
val cc12 = CC1(1, 2.0f, 3.0)
val cc21 = CC2(1, 2.0f, 3.0); cc21.l = math.E
val cc22 = CC2(1, 2.0f, 3.0)
printf("cc11 == cc12: %s%n", cc11 == cc12); cc12.k = math.Pi * math.E
printf("cc11 == cc12: %s%n", cc11 == cc12)
printf("cc21 == cc22: %s%n", cc21 == cc22)
}
}
REPLでは:
scala> import rrs.scribble.CCVarEq._
import rrs.scribble.CCVarEq._
scala> show
cc11 == cc12: true
cc11 == cc12: false
cc21 == cc22: true
そして、並行性に関するすべてのジェイミーのポイントも有効です。