2014-09-25 47 views

回答

2

貌似days是天的List。第一種情況是對列表進行解構,其中firstDay是列表的頭部,而otherDays是列表的尾部或「休息」。

第一種情況將在任何非空列表上匹配,而第二種情況將匹配在空列表上。

5

它本身不是開關。在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,並且您將延遲副作用(可測試性更強)。