在Scala中有一个'空'case语句是什么意思?

时间:2014-09-15 08:25:01

标签: scala syntax

编译器如何解释这个?:

foo match {
  case bar: Bar => println("First case statement")
  case _ => 
}

第二种情况是空的,没有任何回报。

2 个答案:

答案 0 :(得分:15)

这意味着返回Unit

val res: Unit = new foo match {
  case bar: Bar => println("First case statement")
  case _ =>
}

如果您更改语句以返回代替println(返回Unit)的内容:

val res: Any = new foo match {
  case bar: Bar => "it's a bar"
  case _ =>
}

现在编译器推断出Any,因为它是StringUnit之间的第一个常见超类型。

请注意,您的大小写匹配错误,因为仅bar上的匹配意味着捕获所有变量,您可能需要bar: Bar

答案 1 :(得分:1)

模式匹配示例中需要默认 大小写,因为否则 match表达式会为每个不是条形的expr参数抛出MatchError。

没有为第二种情况指定代码的事实,因此如果该情况运行,它什么都不做。

任何一种情况的结果都是单位值(),因此也是整个匹配表达式的结果。

有关Martin Odersky的 Scala编程一书中有关案例类和模式匹配章节的详细信息。