2012-04-19 54 views
4

首先让我提前道歉,我发布的第一个问题是堆栈溢出,可能是一个相当愚蠢的问题。对地图对象的应用方法?

由于阶一个Map使用以下语法实例:

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

我是从scala.collection.immutable期待地图目的是提供一种apply方法与签名大致看起来像:

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

显然我应该是盲人,但我找不到这样一种方法。它在哪里定义?

此外,可能有人给我讲述了Map1Map2Map3Map4Map对象定义的类的目的的信息?它们应该由开发人员使用还是仅由语言和/或编译器内部使用?它们是否与我上面提到的地图实例化方案有关?

在此先感谢您的帮助。

+0

http://www.scala-lang.org/api/2.9.1/index.html#scala.collection.immutable.Map $ - 这是您的申请方法。 – Rogach 2012-04-19 09:26:04

+1

你可以阅读更多关于Scala集合和'MapN'类的编程scala [Default sets and maps](http://www.artima.com/pins1ed/collections.html#tab:default-maps) – 4e6 2012-04-19 09:38:18

回答

6

apply看起来像它定义在scala.collection.generic.GenMapFactory,超类scala.collection.immutable.Map。出于某种原因,斯卡拉多简单地忽略了2.9.2的这种方法。 (作为Rogach指出,它在那里的2.9.1。)

Map1 ... Map4(连同EmptyMap,这是私人的)只是最佳化。这些在Map.scala内部定义,并且实际上只是直接保持四个键和值,而不需要任何进一步的间接寻址。如果试图添加到Map4,则会自动创建HashMap

您通常不需要手动创建一个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 
+0

我没有'认为斯卡拉多克可能已经“忘记”了一种方法。下一次我会仔细检查文档和源代码。 谢谢。 – 2012-04-19 09:42:17

+0

它看起来像scaladoc中的一个bug。 [MapFactory](http://www.scala-lang.org/api/current/index.html#scala.collection.generic.MapFactory)显示'GenMapFactory'中的'empty'和'newBuilder'方法,但不包含'apply '。 – incrop 2012-04-19 10:25:54

+0

文档在[每晚]上正确生成(http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.collection.immutable.Map$) 。 – 2012-04-19 17:10:22