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/

10-16 10:15