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

vaqhlq81  于 12个月前  发布在  Scala
关注(0)|答案(2)|浏览(261)

编译器如何解释它?:

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

字符串
第二个case是空的,没有返回任何内容。

btqmn9zl

btqmn9zl1#

在模式匹配示例中,*emptydefault * case是必需的,因为否则match表达式将为每个不是bar的expr参数抛出MatchError。
没有为第二种情况指定任何代码,因此如果该情况运行,它什么也不做。
任何一种情况的结果都是Unit值
(),因此,它也是整个匹配表达式的结果。
有关它的更多细节,请参阅Martin Odersky的
Programming in Scala一书中的Case Classes and Pattern Matching**一章。

oiopk7p5

oiopk7p52#

返回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之间的第一个公共超类型。
请注意,您的case match是错误的,因为仅对bar进行匹配意味着捕获所有变量,您可能需要bar: Bar

相关问题