Scala:块中的“getOrElse”

时间:2013-12-20 18:52:51

标签: scala

我是Scala&的新手。每个人都说,当if myFoo.get is null then被包裹在Scala中的myFoo(例如Option)时,使用Option[myFoo]这样的内容是不好的

我一直遇到getOrElse但是所有引用getOrElse的答案都让我更加困惑,即使听起来很简单(“getOrElse”)。


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

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

2 个答案:

答案 0 :(得分:7)

看起来您没有Option,但有些值可能是null

  

如果myFoo为空

在这种情况下,您必须使用Option包裹它:Option(myFoo)

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

Option(myFoo)myFoo包裹Option:如果是null,您将获得None,否则您将获得Some(myFoo)

有关使用Option的方法,请参阅此文章:scala.Option Cheat Sheet

另请查看this answer

请注意,如果myFooOption,则不需要将其换行:将Option(myFoo) match替换为myFoo match

另外,您应该注意空get Option上的None会引发异常,而不是返回null

  

如果myFoo.get为null,则

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

答案 1 :(得分:2)

选项可以是两种类型:Some和None。 None表示某些包含值的绝对值,而Some表示它具有值。将Option视为1个元素的列表。所以当你做一个getOrElse时,你真正说的是给我这个价值或者如果是空的,给我这个其他价值。