【发布时间】:2011-10-01 10:06:32
【问题描述】:
可能重复:
Why Option[T] ?
我是 Scala 的新手,我无法真正感受到 java 上的 null 和 Scala 上的 Option 之间的区别。
我知道没有一个对象,如果我在 Scala 上写这样的东西,它会很安全:
val map = Map("koko" -> "is a cat")
val string:Option[String] =map.get("other")
println(string.map(a=>println(a.toString)) )
结果我得到了None,而不是抛出异常。
很有趣。
但是,如果我需要返回值不被 Some 包裹。我将使用 .get 来返回值。
在我们的例子中,它会抛出一个异常选项:
map.get("other").get.map(a=>println(a.toString))
我知道我可以使用 "match" 来处理这个问题。 我在这里需要了解 Scala 上的选项与 java 上的 null 的蓬勃发展!
我仍然无法得到的是,我如何利用 Option 的优点,但如果我的变量中存在值,则返回值不是 Some(value)
def testOption(): String = {
val map = Map("koko" -> "is a cat")
val string: Option[String] = map.get("koko")
string
}
我的意思是有什么办法可以使这段代码工作而不是将返回值更新为 Option[String] !
想象一下,我必须返回一个字符串才能设置到我的 bean 变量中,该变量的类型为 String 而不是 Option[String]
如果没有任何类型的match,我怎么能做到这一点!
我想如果有什么东西让它起作用,那会让我很好地理解Option的力量。
【问题讨论】:
-
您可以使用
apply,而不是get。鉴于它存在于地图中,它将返回确切的值。
标签: scala