5

マップを使用する場合、不変のマップをインポートする必要はありません

scala> val map=Map[String,Int]()
map: scala.collection.immutable.Map[String,Int] = Map()

しかし、HashMap を使用すると、インポートを行わずにエラーが発生します。

scala> val a=HashMap[Int,Int]()
 <console>:7: error: not found: value HashMap
       val a=HashMap[Int,Int]()
             ^

しかし、 import scala.collection.immutable.HashMap を実行すると、機能します。

Set と Hashset でも見られます。

Map と Set は trait であり、HashSet、HashMap はクラスであることに気付きました。

では、なぜそうなのか???

編集

クラス Stack と Queue も scala.collection パッケージに存在します。それでは、なぜこれらのクラスをインポートする必要があるのでしょうか。???

4

4 に答える 4

14

実装ではなく、インターフェイスにプログラムします。Scala の設計者は、Predef でインターフェイスへのショートカットを提供することで、これを奨励しました。

于 2013-02-12T16:55:48.790 に答える
3

Predef暗黙的にインポートされているためです。とりわけ、 のような一般的なトレイトのファクトリ メソッドが含まれていますMapHashMapは具体的な実装であるため、そのファクトリ メソッドを型推論で使用すると、宣言を実装に密結合することになります。

于 2013-02-12T16:47:59.450 に答える
1

Scala では、不変の型を好むのが慣用的であるため、それらはデフォルトで使用可能になっています。突然変異が必要な場合は、明示的にそう言わなければなりません。

別の潜在的な理由 (そして私は推測しています) は、HashMapMap であり、多くの場合、取得する Map の具体的な実装をあまり気にしません。ルックアップ。したがって、HasArrayMappedTrie("foo" -> "bar") よりも Map("foo" -> "bar") と言う方が抽象的です。

于 2013-02-12T16:55:01.847 に答える
0

おそらく、このコレクション クラスの階層に関係しています。

ここに画像の説明を入力

于 2013-02-12T16:56:44.070 に答える