5

在下面的代码中,为什么会发生类型不匹配?

scala> val lb = ListBuffer[Tuple2[Int, Int]]()
lb: scala.collection.mutable.ListBuffer[(Int, Int)] = ListBuffer()

scala> lb += (1, 2)
<console>:11: error: type mismatch;
 found   : Int(1)
 required: (Int, Int)
              lb += (1, 2)
                     ^

scala> lb += Tuple2(1, 2)
res43: lb.type = ListBuffer((1,2))
4

2 回答 2

9

布赖恩的回答是对的,但我建议这样写:

lb += 1 -> 2

有一个从Anyto的隐式转换ArrowAssoc,它有方法->

class ArrowAssoc[A](val x: A) {
    def -> [B](y: B): Tuple2[A, B] = Tuple2(x, y)
  }
于 2013-02-05T04:55:05.810 回答
7

当你的写作

lb += (1, 2)

它实际上是这样做的,你用两个整数参数调用 += 方法,它应该是一个 Tuple2[Int, Int]:

lib.+=(1, 2)

要解决此问题,请在 (1, 2) 周围添加另一个 (),如下所示:

lb += ((1, 2))
lib.+=((1, 2))
于 2013-02-05T04:50:23.250 回答