【问题标题】:Adding value to Scala map为 Scala 地图添加价值
【发布时间】:2013-07-20 19:33:48
【问题描述】:

为什么会这样:

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)
               ^

如果我在 REPL 中输入 (1,0),它会正确地将其键入为 (Int,Int)

我应该补充一点,这很好用:

x + (1 -> 0)

【问题讨论】:

    标签: scala map


    【解决方案1】:

    这是由于元组表示法和参数列表表示法之间的相似性造成的歧义:

    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),因此出现错误。

    【讨论】:

    • 感谢您的出色解释以及答案!
    【解决方案2】:

    添加另一对括号以使其工作:

    val x = Map[Int,Int]()
    x + ((1, 0))
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多