2016-05-23 5 views
4

を介して作成することができ、例えば、MapとSetの実際のクラス(抽象ではなく、特性がない)は何ですか?スカラ、マップセットリテラルで

val m = Map(1->"a") 

と基準mのタイプとリテラルの両方Map[Int, String]あります。

しかし、Scalaの文書がインスタンス化するために実装する必要がある抽象メンバーと、Mapが実際に形質であることを示しています scala.collection.Mapscala.collection.immutable.Mapscala.collection.mutable.Map

だから私の質問は次のとおりです。実際何ですかリテラルMapの具体的なクラスは?上記の同じ質問はSetにも当てはまります。

答えて

7

あなたはgetClassで、具体的な実行時のクラスを見つけることができます。

scala> println(m.getClass) 
class scala.collection.immutable.Map$Map1 

だからMap1Mapコンパニオンオブジェクト内で定義されたクラスです。しかし、少し大きめの地図で同じことを試してみましょう。

scala> val m2 = Map(1 -> "a", 2 -> "b") 
m2: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b) 

scala> println(m2.getClass) 
class scala.collection.immutable.Map$Map2 

これは異なるクラスです。より多くの要素を含む地図を試してみましょう:

scala> println((0 to 10).map(i => i -> i.toString).toMap.getClass) 
class scala.collection.immutable.HashMap$HashTrieMap 

これはまだ別のクラスです。要するに

、あなたがMap(...)またはtoMapから取得する具体的なランタイムクラスは、あなたがそれを心配する必要はありません(ただし、あなたが行うとき、あなたはgetClassに確認することができます)実装の詳細と時間の大半であります。

+0

非常に洞察力がある!答えに感謝します。あなたはそのような細部へのScalaを記述する本の推薦を持っていますか? –

関連する問題