最近,我发现自己正在编写一个通用实用程序,将Option
转换为scala.util.Try
,如下所示:
implicit class OptionTry[A](oa: Option[A]) extends AnyVal {
def asTry[E <: Exception](e: E): Try[A] = oa match {
case Some(a) => Success(a)
case None => Failure(e)
}
def asTry(msg: String): Try[A] = asTry(new Exception(msg))
}
现在我想知道为什么标准库不提供它。我想念什么吗?
最佳答案
这个问题可能是题外话,因为除了意见或猜测外,我没有其他答案,但这是我的猜测。
引入Try
是try
-catch
语法的替代方法。在Scala世界中,异常在某种程度上并不常见,并且Try
可以帮助您处理抛出的API,而不是鼓励您使用异常。
似乎您在Either
比Try
更合适的情况下使用此功能。例如,我建议不要使用o.asTry("xyz")
来获取Try[A]
,而是建议o.toRight("xyz")
来获取Either[String, A]
。
关于scala - 从选项转换为尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34116266/