Pair two scalar values and use an optional result safely.

tuples-options A tuple groups a few values by position. An option represents either a present value or no value.

Tuples and Options

lookup
TuplesOptions.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val lookup = "hit"
    val result = if (lookup == "hit") Some("ready") else None
    val label = result.getOrElse("missing")
    val pair = ("status", label)

    println("lookup=" + lookup)
    println(pair._1 + "=" + pair._2)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val lookup = "miss"
    val result = if (lookup == "hit") Some("ready") else None
    val label = result.getOrElse("missing")
    val pair = ("status", label)

    println("lookup=" + lookup)
    println(pair._1 + "=" + pair._2)
  }
}
  1. lookup ← hit, result ← Some(ready), label ← ready, pair ← (status,ready)

    1object Main {2  def main(args: Array[String]): Unit = {3    val lookup→ hit = "hit" //@lookup="miss"4    val result→ Some(ready) = if (lookuphit == "hit") Some("ready") else None5    val label→ ready = resultSome(ready).getOrElse("missing")6    val pair→ (status,ready) = ("status", labelready)78    println("lookup=" + lookuphit)9    println(pair(status,ready)._1 + "=" + pair._2ready)10  }11}
    outputlookup=hit
    status=ready
  1. lookup ← miss, result ← None, label ← missing, pair ← (status,missing)

    1object Main {2  def main(args: Array[String]): Unit = {3    val lookup→ miss = "miss"4    val result→ None = if (lookupmiss == "hit") Some("ready") else None5    val label→ missing = resultNone.getOrElse("missing")6    val pair→ (status,missing) = ("status", labelmissing)78    println("lookup=" + lookupmiss)9    println(pair(status,missing)._1 + "=" + pair._2missing)10  }11}
    outputlookup=miss
    status=missing

Follow the Lookup

  1. lookup starts as hit.
  2. A hit produces Some("ready").
  3. getOrElse("missing") gives ready.
  4. The pair becomes ("status", "ready").
  5. The program prints lookup=hit and status=ready. | lookup | result | status | | --- | --- | --- | | hit | Some("ready") | ready | | miss | None | missing |

Exercise: TuplesOptions.scala

Reproduce status=ready, then use lookup miss to predict the status value.