可能重复:
为什么选项[T]?
我是Scala的新手,我无法真正感受到java和OptionScala上的null之间的区别.我知道没有一个是对象,如果我在Scala上写这样的smth,它会安全的:
val map = Map("koko" -> "is a cat")
val string:Option[String] =map.get("other")
println(string.map(a=>println(a.toString)) )
Run Code Online (Sandbox Code Playgroud)
我得到None的结果不是抛出异常.这真有趣 .
但是,如果我需要返回值不被包装Some.我将使用.get来返回值.
在我们的例子中,它将抛出异常:
map.get("other").get.map(a=>println(a.toString))
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过使用"匹配"来处理这个问题.我正在这里,我需要了解Scala上的选项对于java上的null有什么兴趣!
我仍然无法得到的是我如何使用Option的优点但是如果我的变量中存在值,则返回值不 Some(value)
def testOption(): String = {
val map = Map("koko" -> "is a cat")
val string: Option[String] = map.get("koko")
string
}
Run Code Online (Sandbox Code Playgroud)
我的意思是有任何方法使这段代码工作,而不是更新返回值Option[String]!想象一下,我必须返回一个String才能被设置为我的bean变量,而不是String类型Option[String]
我怎么能没有任何形式的作品match!我想如果有它可以使它有效,那将使我更好地理解它的力量Option.
选项实际上非常有用.在Java中,很难记录某些东西是否可以为空.在Scala中,您通常可以假设所有变量都不为空.
当您有一些可能失败或未定义的计算时,这非常有用.一个很好的例子是,如果你有一个webapp并且有一些用户数据未填写,那么计算就无法运行.如果你在地图中有用户数据,你可以做类似的事情
val myData = map.get(userId).map(doFunction).map(toHtml)
println(myData.getOrElse(noDataHtml))
Run Code Online (Sandbox Code Playgroud)
很明显,我们永远不必担心null.如果用户数据在地图中,我们继续计算,然后将其转换为html.否则,我们只打印出默认的html.在Java中,在每个阶段我们都必须进行空检查,但在Scala中我们可以链接函数.
| 归档时间: |
|
| 查看次数: |
4869 次 |
| 最近记录: |