Scala:块中的"getOrElse"

goo*_*goo 2 scala

我是新来的Scala和每个人都告诉它的不好用类似if myFoo.get is null then时,myFoo被包装在一个Option(如Option[myFoo]Scala中)

我一直在看,getOrElse但所有引用getOrElse的答案都让我更加困惑,尽管听起来很简单("getOrElse").


这就是我想要做的.如果myFoo为null则执行,something但如果不是则执行somethingElse.

有人可以用最简单的方式为我解释一下吗?不一定是一个很长的答案,但我会感谢我能得到的所有帮助.

sen*_*nia 7

看起来你没有Option,但有些价值可能是null:

如果myFoo为null

在这种情况下,你必须用Option:包装它Option(myFoo).

val result = Option(myFoo) match {
  case Some(value) =>
    // something
    // you could use `value` here
  case None =>
    // something else
}
Run Code Online (Sandbox Code Playgroud)

Option(myFoo)包裹myFooOption:如果null你得到了,None否则你会得到Some(myFoo).

请参阅此文章:scala.Option Cheat Sheet了解使用的方法Option.

另外看看这个答案.

请注意,如果myFooOption,则不需要将其包装:替换Option(myFoo) matchmyFoo match.

另外你应该注意,get在空Option(on None)上抛出异常而不是返回null:

如果myFoo.get为null则

你会得到一个例外,而不是null.你永远不应该使用get.