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.")
}
在这段代码中,“otherDays”是什么意思?
如何理解这种切换案例逻辑?
谢谢
最佳答案
它本身不是一个开关。在 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
并且您将副作用延迟到最后(更可测试)。关于scala switch case 逻辑,otherDays 在这段代码中是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26029713/