我正在使用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.)
我想去掉周围的一些()。
有什么建议吗?
4条答案
按热度按时间cyej8jka1#
有很多方法可以处理
Option
类型。不过,首先要认识到,拥有这样的引用而不是潜在的null
引用要好得多!不要仅仅因为您习惯了Java的工作方式就试图摆脱它。正如其他人最近所说:坚持它几个星期,每次你必须回到一种不提供
Option
类型的语言时,你都会抱怨。现在,关于你的问题,最简单和最冒险的方法是:
对
Some
对象调用.get
会在内部检索该对象。但是,如果您使用的是None
(例如,如果键不在您的Map中),它确实会给您一个运行时异常。更简单的方法是使用
Option.foreach
或Option.map
,如下所示:正如您所看到的,当且仅当您拥有实际值时,这才允许您执行语句。如果
Option
改为None
,则不会发生任何事情。最后,在
Option
类型上使用模式匹配也很流行,如下所示:laik7k3q2#
我个人喜欢使用
.getOrElse(String)
,并默认使用类似“None”的名称,即.getOrElse("None")
。4zcjmb1e3#
我遇到了类似的问题,替换为.Key()来解决。解决方案:定义Map(选择)
jobtbby34#
在现代Scala中,您只需
map(key)