Noe*_*edy 20 scala scala-option
这基本上是为了包装java工厂方法,如果无法根据输入创建项目,则抛出异常.我正在寻找基础库中的东西,如:
def exceptionToOption[A](f: => A):Option[A] ={
try{
Some(f)}
catch{
case e:Exception => None}
}
Run Code Online (Sandbox Code Playgroud)
用法:
val id:Option[UUID] = exceptionToOption(UUID.fromString("this will produce None"))
Run Code Online (Sandbox Code Playgroud)
我知道我可以自己写,但我想检查一下,我不是在重新发明轮子.
Dan*_*ral 16
使用scala.util.control.Exception:
import scala.util.control.Exception._
allCatch opt f
Run Code Online (Sandbox Code Playgroud)
而你可以使它更复杂.例如,要仅捕获算术异常并检索异常:
scala> catching(classOf[ArithmeticException]) either (2 / 0)
res5: Either[Throwable,Int] = Left(java.lang.ArithmeticException: / by zero)
Run Code Online (Sandbox Code Playgroud)
rip*_*ash 10
从scala 2.10开始,您可以在scala.util.Try中运行代码(例如工厂方法),然后将其转换为toOption
:
import scala.util.Try
Try("foo".toInt).toOption // None
Try("7".toInt).toOption // Some(7)
Run Code Online (Sandbox Code Playgroud)
或者翻译成你原来的例子:
val id: Option[UUID] = Try(UUID.fromString("this will produce None")).toOption
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3006 次 |
最近记录: |