匹配可能值的子集时避免MatchError

时间:2016-09-09 21:37:36

标签: scala pattern-matching

我想知道是否可以匹配可能值的子集,而不会抛出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 _ =>子句。

如果您只是想要某事而不是返回,如果您不必匹配所有可能的值,那将会更方便和简洁>某事。这可能吗?

1 个答案:

答案 0 :(得分:2)

所以你想要的是一个部分功能,其中匹配失败什么都不做。除了我们没有收藏品之外,这几乎是collect的定义。这很容易修复,导致

def foo(bar: String): Unit = {
  Some(bar) collect {
      case "x" => isX()
      case "y" => isY()
  }
}

做你想做的事。