ここで削除でき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