Scala Map#获取并返回Some()

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (17)

我使用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()。

提问于
用户回答回答于

至于你的问题,最简单和最危险的方式是:

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

扫码关注云+社区