它本身不是開關。在Scala中它被稱爲模式匹配。 days
正在匹配您的示例中的2個案例。雖然您沒有提供days
變量的類型,但它可能是List
。
如果您的列表不爲空,那麼它將匹配第一種情況:case firstDay :: otherDays
,並且將被解構或不應用到兩個變量head :: tail
。 ::
「操作員」通過在左側列表中預先添加一個元素來構建一個列表。在你的情況下,它被用來解構列表。本質上,它看起來像這樣:::(head, tail)
這將成爲::.unapply(selector)
調用其中::
是一個對象,unapply
具有這樣的特徵:
def unapply[A](value: List[A]): Option[(A, List[A])]
到底
unapply
所以被稱爲列表返回它Some
上的頭部和如果列表不爲空,則尾部爲None
。 Scala將自動轉換Option
以匹配模式匹配中的正確case
。
請注意,此表達式的結果類型爲Unit
,它不是非常FP的樣式。您可以將其更改爲:
val res =
days match {
case firstDay :: otherDays =>
"The first day of the week is: " + firstDay
case List() =>
"There don't seem to be any week days."
}
println(res)
更加實用。在這種情況下,返回類型將爲String
,並且您將延遲副作用(可測試性更強)。