我是Scala&的新手。每个人都说,当if myFoo.get is null then
被包裹在Scala中的myFoo
(例如Option
)时,使用Option[myFoo]
这样的内容是不好的
我一直遇到getOrElse
但是所有引用getOrElse的答案都让我更加困惑,即使听起来很简单(“getOrElse”)。
这就是我想要做的。如果myFoo
为空,则执行something
但如果不是somethingElse
。
有人可以用最简单的方式为我解释一下吗?不一定是一个很长的答案,但我会感谢我能得到的所有帮助。
答案 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。
请注意,如果myFoo
是Option
,则不需要将其换行:将Option(myFoo) match
替换为myFoo match
。
另外,您应该注意空get
Option
上的None
会引发异常,而不是返回null
:
如果myFoo.get为null,则
你会得到一个例外,而不是null
。你永远不应该使用get
。
答案 1 :(得分:2)
选项可以是两种类型:Some和None。 None表示某些包含值的绝对值,而Some表示它具有值。将Option视为1个元素的列表。所以当你做一个getOrElse时,你真正说的是给我这个价值或者如果是空的,给我这个其他价值。