scala - 为 Scala map 增加值(value)

标签 scala map

为什么这样做:

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/

相关文章:

scala - 通过 JDBC 在 spark 上从远程配置单元读取数据返回空结果

scala - 玩 2.5 和 Sangria

java - 在顶级 map 上使用@JacksonInject 和@JsonCreator

scala - 为什么 Scala Trait 可以扩展类?

java - 在 Scala 中 stub 网络调用

scala - 给定一个整数数组,使用 Scala 返回两个数字的索引,使它们相加达到特定目标

groovy - 给定值,在 map 中查找键

perl - 在 Perl 中如何使用 map() 将操作应用于散列的每个元素?

c++ - 如何将结构传递给 STL 映射?

c# - 谁能解释为什么 C# 中的 Dictionary<> 不像 STL 中的 map<T,U> 那样工作?