为Scala地图添加值

kan*_*elc 8 scala map

为什么这样做:

val x = Map[Int,Int]()
val y = (1, 0)
x + y
Run Code Online (Sandbox Code Playgroud)

但不是吗?

val x = Map[Int,Int]()
x + (1, 0)
Run Code Online (Sandbox Code Playgroud)

产生的错误是:

<console>:11: error: type mismatch;
found   : Int(1)
required: (Int, ?)
          x + (1,0)
               ^
Run Code Online (Sandbox Code Playgroud)

如果我要进入(1,0)REPL,它会正确输入(Int,Int).

我应该补充说这很好用:

x + (1 -> 0)
Run Code Online (Sandbox Code Playgroud)

gou*_*ama 6

这是由元组符号与参数列表之间的相似性引起的模糊性:

x + (1,0)是符号,x.+(1,0)但遗憾的是没有方法x需要两个Int参数.你想要的是x.+((1,0)),即x + ((1,0)).

也有一些是在斯卡拉称为自动几倍,看到这个问题和答案,这改写,例如,println (1,2)println((1,2)).除非这在这里不起作用,因为该+方法采用可变数量的参数而不是单个参数println.

你得到那个奇怪的错误信息,因为它希望参数列表中的每个值(1,0)都是一个元组,如myMap + ((1,2), (1,3), (3,4)).它找到一个Int而不是一个(Int, Int),因此错误.