做一个
- 将其明确声明为
Either[X, Y]
.
- 将其声明为
MaybeResult[Y]
(for type MaybeResult[A] = Either[Failure, A]
)
坦率地说,即便如此,我也会明确声明。#2(超过您的建议)的优点是,对于标准Failure
类型(可能是Exception
or List[String]
),您不必为要使用它的任何地方声明单独的类型别名。
使用的好处Either
是API 用户100% 清楚正在发生的事情。但是,我会更进一步并使用 Scalaz 的Validation
:
def someApiCall : ValidationNEL[String, Result]
这里的优点是可以Validation
以 Either 不是的方式组合(否则它们是同构类型)。例如:
def a(i : Int) : ValidationNEL[String, Float]
def b(f : Float) : ValidationNEL[String, Boolean]
然后你可以编写:
a(1) >>= b //ValidationNEL[String, Boolean]
像这样:
scala> def a(i : Int) : ValidationNEL[String, Float] = error("")
a: (i: Int)scalaz.Scalaz.ValidationNEL[String,Float]
scala> def b(f : Float) : ValidationNEL[String, Boolean] = error("")
b: (f: Float)scalaz.Scalaz.ValidationNEL[String,Boolean]
scala> lazy val c = a(1) >>= b
c: scalaz.Validation[scalaz.NonEmptyList[String],Boolean] = <lazy>