我正在使用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.)
我想删除它周围的一些()。
有什么建议吗?
发布于 2012-02-22 14:15:17
有很多方法可以处理Option
类型。但是,首先要认识到,拥有这个而不是一个潜在的null
引用要好得多!不要仅仅因为您已经习惯了Java的工作方式就试图摆脱它。
正如其他人最近所说的那样:坚持几个星期,每次你不得不回到一种不提供Option
类型的语言时,你都会抱怨。
现在,关于你的问题,最简单和最冒险的方法是:
mymap.get(something).get
在Some
对象上调用.get
将在内部检索该对象。但是,如果您有一个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
发布于 2019-01-11 10:04:45
我个人喜欢使用.getOrElse(String)
,并使用类似于"None“的默认设置,即.getOrElse("None")
。
发布于 2021-07-30 10:49:22
我遇到了类似的问题,替换为.Key()来解决。解决方案:definitionMap(选择)
https://stackoverflow.com/questions/9389902
复制相似问题