假设您有以下Either[A1,B2]
个实例,其中A1
和B2
被map
编辑以匹配Either[A,B]
,其中A
和{{ 1}}有一个共同的子类型B
。有没有办法轻松将类型S
和A
缩小到B
?
答案 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]