Scala 斯卡拉:“我的朋友。”;getOrElse";在一个街区里

Scala 斯卡拉:“我的朋友。”;getOrElse";在一个街区里,scala,Scala,我是Scala新手&每个人都告诉我,如果myFoo.get为null,那么在Scala中将myFoo包装在选项中(例如Option[myFoo])时使用这样的东西是不好的 我经常遇到getOrElse,但是所有提到getOrElse的答案都让我更加困惑,尽管听起来很简单(“getOrElse”) 这就是我要做的。如果myFoo为空,则执行somethingese,但如果不是空,则执行somethingese 有人能用最简单的方式给我解释一下吗?答案不一定很长,但我很感激能得到的所有帮助。看起来

我是Scala新手&每个人都告诉我,如果myFoo.get为null,那么在Scala中将
myFoo
包装在
选项中(例如
Option[myFoo]
)时使用
这样的东西是不好的

我经常遇到
getOrElse
,但是所有提到getOrElse的答案都让我更加困惑,尽管听起来很简单(“getOrElse”)


这就是我要做的。如果
myFoo
为空,则执行
somethingese
,但如果不是空,则执行
somethingese


有人能用最简单的方式给我解释一下吗?答案不一定很长,但我很感激能得到的所有帮助。

看起来你没有
选项,但有些值可能是
空的:

如果myFoo为null

在这种情况下,您必须使用
选项
选项(myFoo)

选项(myFoo)
选项
包装
myFoo
:如果
为空
您将获得
,否则您将获得
一些(myFoo)

有关使用
选项的方法,请参阅本文

也来看看

请注意,如果
myFoo
是一个
选项
,则不需要将其包装:将
选项(myFoo)匹配
替换为
myFoo匹配

您还应该注意到
get
on empty
选项
(on
None
)抛出异常,而不是返回
null

如果myFoo.get为null,则


您将得到一个异常,而不是
null
。您不应该使用
get

选项可以是两种类型:部分和无。None表示某些包含值的消失,而另一些表示它有一个值。将选项视为1个元素的列表。所以当你做一个getOrElse时,你真正要说的是给我这个值,如果是空的,给我这个值。

谢谢。这个答案和@senia让我非常清楚。谢谢:)@Jon:请注意,如果
myFoo
实际上是一个
选项
,则无需将其包装-将
选项(myFoo)匹配
替换为
myFoo匹配
val result = Option(myFoo) match {
  case Some(value) =>
    // something
    // you could use `value` here
  case None =>
    // something else
}