Scala Map#Get和Some()的返回

np8igboo  于 2022-11-09  发布在  Scala
关注(0)|答案(4)|浏览(166)

我正在使用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.)

我想去掉周围的一些()。
有什么建议吗?

cyej8jka

cyej8jka1#

有很多方法可以处理Option类型。不过,首先要认识到,拥有这样的引用而不是潜在的null引用要好得多!不要仅仅因为您习惯了Java的工作方式就试图摆脱它。
正如其他人最近所说:坚持它几个星期,每次你必须回到一种不提供Option类型的语言时,你都会抱怨。
现在,关于你的问题,最简单和最冒险的方法是:

mymap.get(something).get

Some对象调用.get会在内部检索该对象。但是,如果您使用的是None(例如,如果键不在您的Map中),它确实会给您一个运行时异常。
更简单的方法是使用Option.foreachOption.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
laik7k3q

laik7k3q2#

我个人喜欢使用.getOrElse(String),并默认使用类似“None”的名称,即.getOrElse("None")

4zcjmb1e

4zcjmb1e3#

我遇到了类似的问题,替换为.Key()来解决。解决方案:定义Map(选择)

jobtbby3

jobtbby34#

在现代Scala中,您只需map(key)

相关问题