为什么这样做:
val x = Map[Int,Int]()
val y = (1, 0)
x + y
但不是这个?
val x = Map[Int,Int]()
x + (1, 0)
产生的错误是:
<console>:11: error: type mismatch;
found : Int(1)
required: (Int, ?)
x + (1,0)
^
如果我输入
(1,0)
进入 REPL,它正确地将其键入为 (Int,Int)
.我应该补充一点,这很好用:
x + (1 -> 0)
最佳答案
这是由元组符号和参数列表符号之间的相似性引起的歧义:x + (1,0)
是 x.+(1,0)
的符号但遗憾的是在 x
上没有方法需要两个 Int
参数。您要的是x.+((1,0))
,即 x + ((1,0))
.
Scala 中有一种叫做自动元组的东西,见 this question and answers ,例如重写 println (1,2)
至 println((1,2))
.除非这在这里不起作用,因为 +
方法采用可变数量的参数,而不是像 println
这样的单个参数.
您会收到那条奇怪的错误消息,因为它期望参数列表中的每个值 (1,0)
是一个元组,如 myMap + ((1,2), (1,3), (3,4))
.它找到了一个 Int
而不是 (Int, Int)
,因此错误。
关于scala - 为 Scala map 增加值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761624/