假设我有一些引发异常的函数。我将它们包装起来以返回Either[Throwable, <function return type>]
。 (假设我需要Either
而不是Try
)。
def fooWrapper(arg1: FooArg1, arg2: FooArg2) =
try Right(foo(arg1, arg2)) catch { case NonFatal(e) => Left(e) }
def barWrapper(arg1: BarArg1, arg2: BarArg2, a3: BarArg3) =
try Right(bar(arg1, arg2, artg3)) catch { case NonFatal(e) => Left(e) }
...
现在,我想编写一个通用包装器来摆脱bolierpllate代码。你有什么建议?
最佳答案
我会写这样的形式:
def wrap[Value](f: => Value): Either[Value, Exception] = try{
Right(f).right
}
catch{
case ex: Exception => Left(ex).right
}
def foo(arg1: FooArg1, arg2: FooArg2) = wrap{
//anything I'd have written before in foo
}
但这并不构成。
Try
更好。更新:如果您只想处理正确的投影,则只需返回正确的投影即可。现在它构成了。
关于scala - 如何将引发异常的函数转换为返回Either的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23633743/