scala switch case logic,其他日子在这段代码中意味着什么

scala switch case logic,其他日子在这段代码中意味着什么,scala,Scala,在此代码中,“其他天”是什么意思? 如何理解此开关盒逻辑 谢谢看起来像是天是一个天的列表。第一种情况是对列表进行分解,其中firstDay是列表的头部,而otherDays是列表的尾部或“rest” 第一种情况将匹配任何非空列表,而第二种情况将匹配空列表。它本身不是开关。在Scala中,它被称为模式匹配天数与示例中的2个案例相匹配。虽然您没有提供days变量的类型,但它可能是一个列表 如果您的列表非空,则它将匹配第一个案例:case firstDay::otherDays,并将解构或取消应用为两

在此代码中,“其他天”是什么意思? 如何理解此开关盒逻辑


谢谢

看起来像是
是一个
天的列表。第一种情况是对列表进行分解,其中
firstDay
是列表的头部,而
otherDays
是列表的尾部或“rest”


第一种情况将匹配任何非空列表,而第二种情况将匹配空列表。

它本身不是开关。在Scala中,它被称为模式匹配<代码>天数
与示例中的2个案例相匹配。虽然您没有提供
days
变量的类型,但它可能是一个
列表

如果您的列表非空,则它将匹配第一个案例:
case firstDay::otherDays
,并将解构或取消应用为两个变量
head::tail
::
“操作符”通过将左侧的元素前置到右侧的列表来构造列表。在你的例子中,它用于解构列表。本质上它看起来是这样的:
:(head,tail)
这将成为对
:.unapply(选择器)
的调用,其中
是一个对象,
unapply
具有如下签名:

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.")
}
因此,如果列表不是空的,则在列表上调用
unapply
,返回它的头和尾的
部分,否则调用
None
。Scala将自动转换
选项
,以匹配模式匹配中的右侧
大小写

请注意,此表达式的结果类型是
Unit
,它不是很FP风格。您可以将其更改为:

def unapply[A](value: List[A]): Option[(A, List[A])]
更实用。在这种情况下,返回类型将是
String
,您将副作用延迟到最后(更易于测试)

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)