我使用scala Map#get函数,并为每个准确的查询返回Some[String]
有一个简单的方法来删除Some?
例:
def searchDefs{
print("What Word would you like defined? ")
val selection = readLine
println(selection + ":\n\t" + definitionMap.get(selection))
}
Run Code Online (Sandbox Code Playgroud)
当我使用此方法并使用以下输入时:
What Word would you like defined? Ontology
Run Code Online (Sandbox Code Playgroud)
返回的值是:
Ontology:
Some(A set of representational primitives with which to model a domain of knowledge or discourse.)
Run Code Online (Sandbox Code Playgroud)
我想删除周围的Some().
有小费吗?
Fra*_*ank 35
有很多方法可以处理这种Option类型.然而,首先,要意识到拥有它而不是潜在的null参考是多么好!不要试图摆脱它只是因为你习惯了Java的工作原理.
正如其他人最近所说:坚持几周,每次你必须回到不提供Option类型的语言时,你都会呻吟.
至于你的问题,最简单和最危险的方法是:
mymap.get(something).get
Run Code Online (Sandbox Code Playgroud)
调用.get一个在Some对象中获取对象.但是,如果你有一个异常None(例如,如果键不在你的地图中),它确实会给你一个运行时异常.
更清洁的方法是使用Option.foreach或Option.map喜欢这样:
scala> val map = Map(1 -> 2)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)
scala> map.get(1).foreach( i => println("Got: " + i))
Got: 2
scala> map.get(2).foreach( i => println("Got: " + i))
scala>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当且仅当您具有实际值时,才允许您执行语句.如果Option是None相反,什么都不会发生.
最后,在这样的Option类型上使用模式匹配也很流行:
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
Run Code Online (Sandbox Code Playgroud)