我正在使用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))
}
当我使用此方法并使用以下输入时:
What Word would you like defined? Ontology
返回的值为:
Ontology:
Some(A set of representational primitives with which to model a domain of knowledge or discourse.)
我想删除周围的Some()。
任何提示?
答案 0 :(得分:34)
有很多方法可以处理Option
类型。然而,首先,要意识到拥有它而不是潜在的null
引用会有多好!不要试图摆脱它只是因为你习惯了Java的工作方式。
正如其他人最近所说:坚持使用它几周,每次你必须回到不提供Option
类型的语言时,你都会呻吟。
至于你的问题,最简单和最危险的方法是:
mymap.get(something).get
在.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>
正如您所看到的,当且仅当您具有实际值时,才允许您执行语句。如果Option
为None
,则不会发生任何事情。
最后,在Option
类型上使用模式匹配也很受欢迎:
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
答案 1 :(得分:0)
我个人喜欢使用.getOrElse(String)
,并使用诸如“无”之类的默认值,即.getOrElse("None")
。
答案 2 :(得分:0)
我遇到了类似的问题,替换为 .Key() 来解决。 解决方案: 定义地图(选择)