在两者之间缩小左右两种类型的简单方法

时间:2017-03-03 15:16:21

标签: scala either

假设您有以下Either[A1,B2]个实例,其中A1B2map编辑以匹配Either[A,B],其中A和{{ 1}}有一个共同的子类型B。有没有办法轻松将类型SA缩小到B

1 个答案:

答案 0 :(得分:0)

您可以在S两侧使用fold功能。这是一个例子:

identity

在这种情况下,您从import com.github.nscala_time.time.Imports._ import play.api.libs.json._ import scala.util.control.Exception._ val parsed = catching(classOf[IllegalArgumentException]) either DateTime.parse(str) val mapped: Either[JsError, JsSuccess[DateTime]] = parsed .right.map(JsSuccess(_)) .left.map(t => JsError(t.getMessage)) val fold: JsResult[DateTime] = mapped.fold(identity, identity) 开始转换为Either[Throwable, DateTime]。双方都有共同的子类型Either[JsError, JsSuccess[DateTime]]

在这种情况下,可以完全推断出类型。在内联变量之后,代码可以简化为:

JsResult[DateTime]