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)