days match {
case firstDay :: otherDays =>
println("The first day of the week is: " + firstDay)
case List() =>
println("There don't seem to be any week days.")
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,"otherDays"是什么意思?如何理解这种开关案例逻辑?
谢谢
它本身不是一个开关.在Scala中,它被称为模式匹配.days在你的例子中匹配2个案例.虽然你没有提供days变量的类型,但它可能是一个List.
如果您的列表非空,那么它将匹配第一种情况:case firstDay :: otherDays并且将被解构或未应用到两个变量中head :: tail.在::"经营者"在前面加上左边的元素在右边的列表中构造一个列表.在你的情况下,它用于解构列表.基本上它看起来像这样:::(head, tail)它将成为对象::.unapply(selector)where 的调用,::并unapply具有如下签名:
def unapply[A](value: List[A]): Option[(A, List[A])]
Run Code Online (Sandbox Code Playgroud)
所以最后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)
Run Code Online (Sandbox Code Playgroud)
更具功能性.在这种情况下,返回类型将是String并且您将副作用推迟到最后(更可测试).