4

首先,让我提前为我在堆栈溢出上发布的第一个问题道歉,而且可能是一个非常愚蠢的问题。

由于 scala 中的 Map 是使用以下语法实例化的:

val myMap=Map(1->”value1”,2->”value2”)

我期待 Map 对象scala.collection.immutable提供一个apply带有大致如下签名的方法:

def apply[A,B](entries :(A,B)*):Map[A,B]

明明应该是瞎了眼,却找不到这样的方法。它在哪里定义?

此外,有人可以给我有关对象中定义的Map1, Map2, Map3,Map4类的用途的信息吗?Map它们应该由开发人员使用还是仅由语言和/或编译器在内部使用?它们是否与我在上面询问的地图实例化方案有关?

在此先感谢您的帮助。

4

1 回答 1

6

apply看起来它是在scala.collection.generic.GenMapFactory的超类上定义的scala.collection.immutable.Map。出于某种原因,Scaladoc 在 2.9.2 中简单地忽略了这个方法。(正如 Rogach 所说,它存在于2.9.1中。)

Map1…<code>Map4(与EmptyMap私有的 一起)只是优化。这些是在Map.scala中定义的,实际上最多直接保存四个键和值,没有任何进一步的间接。如果尝试添加到 a Map4HashMap将自动创建 a 。

您通常不需要Map[1-4]手动创建:

scala> Map('a -> 1)
res0: scala.collection.immutable.Map[Symbol,Int] = Map('a -> 1)

scala> res0.isInstanceOf[scala.collection.immutable.Map.Map1[_,_]]
res1: Boolean = true
于 2012-04-19T09:24:44.560 回答