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

status
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)
  }
}
  1. 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
  1. 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
  1. 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