Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala映射#get和Some()的返回_Scala_Map - Fatal编程技术网

Scala映射#get和Some()的返回

Scala映射#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

我使用scala
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(某物)
如果您知道地图中肯定包含
某些内容,那么它似乎是一个不错的选择。