scala - 尝试/带有 null 的选项

标签 scala

我正在寻找在 scala 中调用函数并获得 Option 的可能性如果在调用方法时引发异常或方法返回 null,则结果为“无”。否则,选项应该具有结果的值。

我知道Try可以用于第一部分,但我不知道如何处理第二部分:

val result = Try(myFunction).toOption()

如果该方法现在返回 null(因为它不是 scala 函数而是 Java 函数),resultSome(null)而不是 None .

最佳答案

据我所知,scala 标准库中只有一种方法可以转换 nullNone - 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/

相关文章:

scala - 这是 Scala 中一个很好的向量操作类

scala - 在 shapeless 2.0 中动态创建可扩展记录

java - 设置字符串的行长度

scala - Play 2.0 中的 stub Controller

class - Scala classOf与getClass

scala - 如何使用 scala Reflect 获取给定类/特征的所有实例?给定实例的所有引用?

arrays - 在 Scala 中加入两个 Array[Byte]?

scala,喷雾,akka - java.lang.OutOfMemoryError : unable to create new native thread

scala - 如何使用 Scala 基于列为每一行创建 map ?

scala - 相当于 F# 中的 Scala "case class"