Scala REPL爲這兩個表達式提供了相同的類型 - (元組? - 奇怪!)。然而("a" ->1)
這是我可以添加到地圖和("a", 1)
不能。爲什麼Scala REPL顯示Map表達式的元組類型?爲什麼Scala REPL顯示Map表達式的元組類型?
scala> :t ("a" -> 1)
(String, Int)
scala> :t ("a",1)
(String, Int)
scala> val m = Map.empty[String, Int]
m: scala.collection.immutable.Map[String,Int] = Map()
scala> m + ("a",1)
<console>:9: error: type mismatch;
found : String("a")
required: (String, ?)
m + ("a",1)
^
scala> m + ("a" ->1)
res19: scala.collection.immutable.Map[String,Int] = Map(a -> 1)
謝謝,我得到了你的解釋有關添加元組!問題的另一部分仍然存在 - 關於將地圖添加到地圖。我理解寫表達式'(「a」 - > 1)'有一個Map類型嗎?此外,我無法在Map文檔中找到用於添加地圖的方法的定義。實際上,doc只有兩個用於添加元組的'+'方法:'def +(kvs:(A,B)*):Map [A,B] [用例]將鍵/值對添加到此映射中,返回一張新地圖。 abstract def +(kv:(A,B)):地圖[A,B] [用例]在此地圖上添加一個鍵/值對,返回一個新地圖。' – 2013-03-24 20:06:39
查看我的答案: ) – Felix 2013-03-24 20:16:43
雷克斯克爾,@費利克斯,感謝你的偉大解釋!我學習Scala的越多,我就越失望((看起來Scala是「最驚喜」的語言,而不是「最少吃驚」的語言)。我學習Scala越多,我越看重Haskell的美麗和清晰! – 2013-03-24 20:36:18