Scala映射#get和Some()的返回
我使用scalaScala映射#get和Some()的返回,scala,map,Scala,Map,我使用scalaMap#get函数,对于每一个精确的查询,它都以Some[String] 是否有一种简单的方法可以删除部分 例如: def searchDefs{ print("What Word would you like defined? ") val selection = readLine println(selection + ":\n\t" + definitionMap.get(selection)) } 当我使用此方法并使用以下输入时: What
Map#get
函数,对于每一个精确的查询,它都以Some[String]
是否有一种简单的方法可以删除部分
例如:
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.)
我想去掉这一点的一些()
有什么提示吗?有很多方法可以处理选项
类型。但是,首先,请务必意识到,使用此引用比使用潜在的null
引用要好得多!不要仅仅因为你习惯了Java的工作方式就试图摆脱它
正如最近有人所说:坚持几周,每次你不得不回到一种不提供选项
类型的语言时,你都会抱怨
至于你的问题,最简单和最危险的方法是:
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>
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
如您所见,这允许您在且仅当您具有实际值时执行语句。如果选项
改为None
,则不会发生任何事情
最后,在选项
类型上使用模式匹配也很流行,如下所示:
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>
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
我个人喜欢使用.getOrElse(String)
并使用类似“None”的默认值,即.getOrElse(“None”)
另请参见:选项的奇妙之处在于它迫使您处理None
的情况。mymap(某物)
看起来更漂亮。@elbowich:Yes,mymap(某物)
如果您知道地图中肯定包含某些内容,那么它似乎是一个不错的选择。