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]

明らかに私は盲目である必要がありますが、そのような方法が見つかりません。どこで定義されていますか?

さらに、 objectで定義されているMap1Map2Map3、クラスの目的に関する情報を教えてもらえますか? それらは開発者によって使用されるべきですか、それとも言語および/またはコンパイラによって内部的にのみ使用されますか? それらは、私が上で尋ねていたマップのインスタンス化スキームに何らかの形で関連していますか?Map4Map

よろしくお願いします。

4

1 に答える 1

6

applyscala.collection.generic.GenMapFactoryのスーパークラスである で定義されているようですscala.collection.immutable.Map。何らかの理由で、Scaladoc は 2.9.2 でこのメソッドを単純に無視します。(Rogach が指摘しているように、それは2.9.1にありました。)

Map1…<code>Map4 (プライベートな とともにEmptyMap) は、単純な最適化です。これらはMap.scala内で定義されており、実際には最大 4 つのキーと値を直接保持するだけで、それ以上の間接化はありません。に追加しようとするとMap4HashMapが自動的に作成されます。

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 に答える