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