Mic*_*ael 0 scala exception-handling optional
假设我有一个f: Int => String可能抛出异常的函数.我想写一个函数tryF(f: Int => String, arg: Int, defaultOpt: Option[String]),其工作原理如下:
f(arg)如果没有抛出异常,则调用并返回结果defaultOpt.isDefined然后返回defaultOpt.get我写的如下:
def tryF(f: Int => String, arg: Int, defaultOpt: Option[String]) = {
val r = scala.util.Try(f(arg))
r.toOption orElse defaultOpt getOrElse r.get
}
Run Code Online (Sandbox Code Playgroud)
是否有意义 ?你会改写它吗?
你的解决方案很好,即使我个人觉得它不太可读.我会做那样的事情:
def tryF[A](f: =>A, defaultOpt: Option[A]): A = (Try(f), defaultOpt) match {
case (Success(result), _) => result
case (Failure(_), Some(defValue)) => defValue
case (Failure(t), None) => throw t
}
Run Code Online (Sandbox Code Playgroud)
请注意,它是不必要的冗长(我可以在某些情况下使用通配符)但我认为您的用例值得一些自我记录代码.很容易理解每种情况的触发因素.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |