リストの場合、型宣言なしで、Scalaはすべての要素を調べて、共通の型を見つけようとします。あなたの場合、IntはDoubleに変換できるので、混合リストをList [Double]に変換して、1つのIntをプロモートします。
Mapコンストラクターは、一連の2タプルを取ります。タプルのリストを作成した場合も、同じ動作が得られます。
scala> List((1, "one"), (2.0, "two.oh"))
res0: List[(AnyVal, String)] = List((1,one), (2.0,two.oh))
Tuple2 [Int、String]をTuple2 [Double、String]に自動的に昇格させることはできません。この場合、型宣言でコンパイラを少し支援する必要があります。
scala> val x: List[(Double, String)] = List((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
また
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
またはあなたの場合:
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh")).toMap
x: scala.collection.immutable.Map[Double,String] = Map(1.0 -> one, 2.0 -> two.oh)
何らかの理由で、Mapで型宣言を使用しても機能しません。理由がわからない:
scala> val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")
<console>:7: error: type mismatch;
found : (Int, String)
required: (Double, String)
val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")