加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:07:11 所属栏目:安全 来源:网络整理
导读: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”是什么意思? 如何理解这种开关案例逻辑? 谢谢 解决方法
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中,它被称为模式匹配.在您的示例中,天数与2个案例相匹配.虽然您没有提供days变量的类型,但它可能是List.

如果你的列表非空,那么它将匹配第一种情况:case firstDay :: otherDays,将被解构或未应用于两个变量head :: tail. ::“operator”通过将左侧的元素添加到右侧的列表来构造列表.在你的情况下,它用于解构列表.基本上它看起来像这样:::( head,tail)将成为对::.unapply(selector)的调用,其中::是一个对象,unapply有这样的签名:

def unapply[A](value: List[A]): Option[(A,List[A])]

所以最后在你的列表中调用unapply如果列表不为空则返回其中的一些头部和尾部,否则返回None. Scala会自动转换Option以匹配模式匹配中的正确情况.

请注意,此表达式的结果类型是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,并且您将副作用延迟到最后(更可测试).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读