scala switch case逻辑,其他日期在这段代码中意味着什么

Buf*_*lls 3 scala

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"是什么意思?如何理解这种开关案例逻辑?

谢谢

yǝs*_*ǝla 5

它本身不是一个开关.在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并且您将副作用推迟到最后(更可测试).