从模式匹配“或”案例中提取相同的值类型

时间:2015-09-23 16:58:02

标签: scala pattern-matching

这一定是可能的,但我无法在网上找到任何示例或指导......

我正在尝试从Either返回中提取变量,其中Left可以有一个Exception案例类,其中包含我想要的值或一个Right,其值为I想。

说明:

def findInnerObj(innerObjId: String): Either[InnerObjNotFoundException, (OuterObj, InnerObj)] = ???

case class InnerObjNotFoundException(outer: OuterObj) extends Exception

用法:

findInnerObj(innerObjId) match {
  case Left(InnerObjNotFoundException(x)) | Right((x, _)) =>
    // do something with x <-- ATM, compiler: "Cannot resolve symbol x"
}

1 个答案:

答案 0 :(得分:3)

不支持带名称绑定的模式替代方案,您可以这样做。

val innerObj = findInnerObj(innerObjId) match {
  case Left(InnerObjNotFoundException(x)) => x
  case Right((x, _)) => x
}
// do something with innerObj