Case Classes and Pattern Matching
Value Equality
Compare two case class values by their fields.
value-equality
Case classes compare by field values, not by object identity. Two instances with the same fields are equal, which makes them safe to compare directly.
Value Equality
ValueEquality.scala
Replay: real traced execution (multi-file project)
case class Color(r: Int, g: Int, b: Int)
object Main {
def main(args: Array[String]): Unit = {
val red = 255
val a = Color(red, 0, 0)
val b = Color(255, 0, 0)
val same = a == b
println("a=" + a.toString)
println("b=" + b.toString)
println("same=" + same)
}
}
case class Color(r: Int, g: Int, b: Int)
object Main {
def main(args: Array[String]): Unit = {
val red = 0
val a = Color(red, 0, 0)
val b = Color(255, 0, 0)
val same = a == b
println("a=" + a.toString)
println("b=" + b.toString)
println("same=" + same)
}
}
case class Color(r: Int, g: Int, b: Int)
object Main {
def main(args: Array[String]): Unit = {
val red = 200
val a = Color(red, 0, 0)
val b = Color(255, 0, 0)
val same = a == b
println("a=" + a.toString)
println("b=" + b.toString)
println("same=" + same)
}
}
red ← 255, a ← Color(255,0,0), b ← Color(255,0,0), same ← true
3object Main {4 def main(args: Array[String]): Unit = {5 val red→ 255 = 255 //@red=200, 06 val a→ Color(255,0,0) = Color(red255, 0, 0)7 val b→ Color(255,0,0) = Color(255, 0, 0)8 val same→ true = aColor(255,0,0) == bColor(255,0,0)910 println("a=" + a.toStringColor(255,0,0))11 println("b=" + b.toStringColor(255,0,0))12 println("same=" + sametrue)13 }14}outputa=Color(255,0,0) b=Color(255,0,0) same=true
red ← 0, a ← Color(0,0,0), b ← Color(255,0,0), same ← false
3object Main {4 def main(args: Array[String]): Unit = {5 val red→ 0 = 06 val a→ Color(0,0,0) = Color(red0, 0, 0)7 val b→ Color(255,0,0) = Color(255, 0, 0)8 val same→ false = aColor(0,0,0) == bColor(255,0,0)910 println("a=" + a.toStringColor(0,0,0))11 println("b=" + b.toStringColor(255,0,0))12 println("same=" + samefalse)13 }14}outputa=Color(0,0,0) b=Color(255,0,0) same=false
red ← 200, a ← Color(200,0,0), b ← Color(255,0,0), same ← false
3object Main {4 def main(args: Array[String]): Unit = {5 val red→ 200 = 2006 val a→ Color(200,0,0) = Color(red200, 0, 0)7 val b→ Color(255,0,0) = Color(255, 0, 0)8 val same→ false = aColor(200,0,0) == bColor(255,0,0)910 println("a=" + a.toStringColor(200,0,0))11 println("b=" + b.toStringColor(255,0,0))12 println("same=" + samefalse)13 }14}outputa=Color(200,0,0) b=Color(255,0,0) same=false