Case Classes and Pattern Matching
Matching a Field
Turn a record field into a readable label.
field-match
A `match` can run on a single field of a case class. Each status code maps to a label, and the `_` case covers any value that is not listed.
Matching a Field
FieldMatch.scala
Replay: real traced execution (multi-file project)
case class Order(id: Int, status: Int)
object Main {
def main(args: Array[String]): Unit = {
val status = 1
val order = Order(7, status)
val name = order.status match {
case 0 => "new"
case 1 => "paid"
case 2 => "shipped"
case _ => "unknown"
}
println("id=" + order.id)
println("status=" + name)
}
}
case class Order(id: Int, status: Int)
object Main {
def main(args: Array[String]): Unit = {
val status = 0
val order = Order(7, status)
val name = order.status match {
case 0 => "new"
case 1 => "paid"
case 2 => "shipped"
case _ => "unknown"
}
println("id=" + order.id)
println("status=" + name)
}
}
case class Order(id: Int, status: Int)
object Main {
def main(args: Array[String]): Unit = {
val status = 2
val order = Order(7, status)
val name = order.status match {
case 0 => "new"
case 1 => "paid"
case 2 => "shipped"
case _ => "unknown"
}
println("id=" + order.id)
println("status=" + name)
}
}
status ← 1, order ← Order(7,1), name ← paid
3object Main {4 def main(args: Array[String]): Unit = {5 val status→ 1 = 1 //@status=0, 26 val order→ Order(7,1) = Order(7, status1)7 val name→ paid = order.status1 match {8 case 0 => "new"9 case 1 => "paid"10 case 2 => "shipped"11 case _ => "unknown"12 }1314 println("id=" + order.id7)15 println("status=" + namepaid)16 }17}outputid=7 status=paid
status ← 0, order ← Order(7,0), name ← new
3object Main {4 def main(args: Array[String]): Unit = {5 val status→ 0 = 06 val order→ Order(7,0) = Order(7, status0)7 val name→ new = order.status0 match {8 case 0 => "new"9 case 1 => "paid"10 case 2 => "shipped"11 case _ => "unknown"12 }1314 println("id=" + order.id7)15 println("status=" + namenew)16 }17}outputid=7 status=new
status ← 2, order ← Order(7,2), name ← shipped
3object Main {4 def main(args: Array[String]): Unit = {5 val status→ 2 = 26 val order→ Order(7,2) = Order(7, status2)7 val name→ shipped = order.status2 match {8 case 0 => "new"9 case 1 => "paid"10 case 2 => "shipped"11 case _ => "unknown"12 }1314 println("id=" + order.id7)15 println("status=" + nameshipped)16 }17}outputid=7 status=shipped