Scala map是undefinedAt()vs contains()方法

时间:2016-03-08 07:02:48

标签: scala dictionary

下面是我的HashMap:

val params1 = collection.mutable.HashMap[String, Any]()

params1 += "forCourseId" -> "2"

println(params1.isDefinedAt("forCourseId"))

println(params1.contains("forCourseId"))

isDefinedAt()&之间有什么区别? contains()方法?

我需要检查密钥是否存在 主要关注的是,它不会抛出空指针异常。

2 个答案:

答案 0 :(得分:10)

您可以查看Scala源代码。在MapLike.scala中,您会看到isDefinedAt实际上只是在调用contains,这意味着它们真的相同:

def isDefinedAt(key: A) = contains(key)

唯一真正的区别是contains特定于Map界面(特别是在GenMapLike上声明的),而在isDefinedAt上找到PartialFunction val m: Map[Int,Int] = Map(1 -> 2) val pf: PartialFunction[Int,Int] = { case 1 => 1 } m.isDefinedAt(1) // ok m.contains(1) // ok pf.isDefinedAt(1) // ok pf.contains(1) // doesn't compile 课程。

ItemStack[]

答案 1 :(得分:1)

根据Scala文档isDefinedAt相当于contains

  

此方法实现了特征PartialFunction的抽象方法,相当于contains。

http://www.scala-lang.org/api/current/#scala.collection.mutable.HashMap