首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Scala Map#get和Some()的返回

Scala Map#get和Some()的返回
EN

Stack Overflow用户
提问于 2012-02-22 14:07:48
回答 3查看 40.5K关注 0票数 26

我正在使用scala的Map#get函数,对于每个准确的查询,它都会以Some[String]形式返回

有没有一种简单的方法删除Some

示例:

代码语言:javascript
复制
def searchDefs{
    print("What Word would you like defined? ")
    val selection = readLine
    println(selection + ":\n\t" + definitionMap.get(selection))
  }

当我使用此方法并使用以下输入时:

代码语言:javascript
复制
What Word would you like defined? Ontology

返回值为:

代码语言:javascript
复制
Ontology:
    Some(A set of representational primitives with which to model a domain of knowledge or discourse.)

我想删除它周围的一些()。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-22 14:15:17

有很多方法可以处理Option类型。但是,首先要认识到,拥有这个而不是一个潜在的null引用要好得多!不要仅仅因为您已经习惯了Java的工作方式就试图摆脱它。

正如其他人最近所说的那样:坚持几个星期,每次你不得不回到一种不提供Option类型的语言时,你都会抱怨。

现在,关于你的问题,最简单和最冒险的方法是:

代码语言:javascript
复制
mymap.get(something).get

Some对象上调用.get将在内部检索该对象。但是,如果您有一个None (例如,如果键不在您的映射中),它确实会给您一个运行时异常。

一种更简洁的方法是像这样使用Option.foreachOption.map

代码语言:javascript
复制
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类型上使用模式匹配也很流行,如下所示:

代码语言:javascript
复制
scala> map.get(1) match {
     |  case Some(i) => println("Got something")
     |  case None => println("Got nothing")
     | }
Got something
票数 45
EN

Stack Overflow用户

发布于 2019-01-11 10:04:45

我个人喜欢使用.getOrElse(String),并使用类似于"None“的默认设置,即.getOrElse("None")

票数 2
EN

Stack Overflow用户

发布于 2021-07-30 10:49:22

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9389902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档