2016-03-08 88 views
3

下面是我的HashMap:斯卡拉地图isDefinedAt()与contains()方法

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

params1 += "forCourseId" -> "2" 

println(params1.isDefinedAt("forCourseId")) 

println(params1.contains("forCourseId")) 

是什么isDefinedAt() & 方法之间的区别?

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

回答

9

您可以检查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