Values, Types, and Expressions
Tuples and Options
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
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)
}
}
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
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
lookupstarts ashit.- A hit produces
Some("ready"). getOrElse("missing")givesready.- The pair becomes
("status", "ready"). - The program prints
lookup=hitandstatus=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.