我想知道是否可以匹配可能值的子集,而不会抛出MatchError
。
def foo(bar: String): Int = bar match {
case "x" => 0
case "y" => 1
case _ => -1
}
在上面的示例中,我了解您必须匹配所有可能的值,因为该方法必须返回一些内容。
def foo(bar: String): Unit = {
bar match {
case "x" => isX()
case "y" => isY()
}
}
但是在上面的示例中,我并不认为有必要匹配所有可能的值,因为该方法不依赖于匹配的结果,因为它只是调用方法。如果bar
不是" x"或" y"然后会抛出MatchError
,这非常烦人,并且避免这需要添加一个毫无意义的case _ =>
子句。
如果您只是想要做某事而不是返回,如果您不必匹配所有可能的值,那将会更方便和简洁>某事。这可能吗?
答案 0 :(得分:2)
所以你想要的是一个部分功能,其中匹配失败什么都不做。除了我们没有收藏品之外,这几乎是collect
的定义。这很容易修复,导致
def foo(bar: String): Unit = {
Some(bar) collect {
case "x" => isX()
case "y" => isY()
}
}
做你想做的事。