val m = scala.collection.mutable.Map[String, Int]()
// this doesn't work
m += ("foo", 2)
// this does work
m += (("foo", 2))
// this works too
val barpair = ("bar", 3)
m += barpair
那么m += ("foo" , 2)
无效的交易是什么? Scala给出了类型错误:
error: type mismatch;
found : java.lang.String("foo")
required: (String, Int)
m += ("foo", 2)
^
显然Scala认为我试图用两个参数调用+=
,而不是一个元组参数。为什么?这不是明确的,因为我没有使用m.+=
?
答案 0 :(得分:9)
不幸的是a b (c, d, e, ..)
去了a.b(c, d, e, ..)
。因此错误。
答案 1 :(得分:3)
这不是明确的,因为我没有使用m。+ =?
不,不是,因为当有多个参数时,总是可以使用括号。例如:
List(1, 2, 3) mkString ("<", ", ", ">")
所以你可能会问,有多个参数?好吧,Scala API文档是你的朋友(至少是我的朋友),所以我告诉你:
scala> val m = scala.collection.mutable.Map[String, Int]()
m: scala.collection.mutable.Map[String,Int] = Map()
scala> m += (("foo", 2), ("bar", 3))
res0: m.type = Map(bar -> 3, foo -> 2)
换句话说,+=
需要vararg。
答案 2 :(得分:2)
定义地图条目的首选方法是使用 - &gt;方法。像
m += ("foo" -> 2)
构造一个元组。 a - &gt; b变得糊涂了.-&gt;(b)。 scala中的每个对象都有一个 - &gt;方法