我正在寻找在 scala 中调用函数并获得 Option
的可能性如果在调用方法时引发异常或方法返回 null,则结果为“无”。否则,选项应该具有结果的值。
我知道Try
可以用于第一部分,但我不知道如何处理第二部分:
val result = Try(myFunction).toOption()
如果该方法现在返回 null(因为它不是 scala 函数而是 Java 函数),
result
是 Some(null)
而不是 None
.
最佳答案
据我所知,scala 标准库中只有一种方法可以转换 null
至None
- Option.apply(x)
,所以你必须手动使用它:
val result = Try(myFunction).toOption.flatMap{Option(_)}
// or
val result = Try(Option(myFunction)).toOption.flatten
您可以像这样创建自己的辅助方法:
implicit class NotNullOption[T](val t: Try[T]) extends AnyVal {
def toNotNullOption = t.toOption.flatMap{Option(_)}
}
scala> Try(null: String).toNotNullOption
res0: Option[String] = None
scala> Try("a").toNotNullOption
res1: Option[String] = Some(a)
关于scala - 尝试/带有 null 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21232140/