ここで削除できmatchます:
(xOption, yOption, xyOption)
この式は を作成しますTuple3。シンタックス シュガーなし:
Tuple3.apply(xOption, yOption, xyOption)
applyメソッド宣言:
def apply[T1, T2, T3](_1: T1, _2: T2, _3: T3): (T1, T2, T3)
すべてのパラメーターはであるため、パラメーター値はメソッド評価のcall-by-value前に評価されます。apply
Withcall-by-nameパラメータlazy valは評価されません。
matchメソッドを呼び出すため、評価はメソッドの実装unapplyに依存します。unapply
lazy val a = { println("a"); 1 }
lazy val b = { println("b"); 1 }
lazy val c = { println("c"); 1 }
scala> val s = a #:: b #:: c #:: Stream.empty
a
s: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> s match {
| case x #:: _ => x
| }
b
res0: Int = 1
ご覧のとおりc、aは評価されず、Stream作成時に評価され、メソッドbで評価されます。#::.unapply