编译器如何解释这个?:
foo match {
case bar: Bar => println("First case statement")
case _ =>
}
第二种情况是空的,没有任何回报。
答案 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
,因为它是String
和Unit
之间的第一个常见超类型。
请注意,您的大小写匹配错误,因为仅bar
上的匹配意味着捕获所有变量,您可能需要bar: Bar
。
答案 1 :(得分:1)
模式匹配示例中需要空默认 大小写,因为否则 match表达式会为每个不是条形的expr参数抛出MatchError。
没有为第二种情况指定代码的事实,因此如果该情况运行,它什么都不做。
任何一种情况的结果都是单位值(),因此也是整个匹配表达式的结果。
有关Martin Odersky的 Scala编程一书中有关案例类和模式匹配章节的详细信息。