在下面的代码中,为什么会发生类型不匹配?
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))
答案 0 :(得分:9)
Brian的答案是对的,但我建议像这样写:
lb += 1 -> 2
从Any
到ArrowAssoc
的隐式转换,其方法为->
:
class ArrowAssoc[A](val x: A) {
def -> [B](y: B): Tuple2[A, B] = Tuple2(x, y)
}
答案 1 :(得分:7)
写作时
lb += (1, 2)
它实际上是这样做的,你用两个整数参数调用+ =方法,它应该是一个Tuple2 [Int,Int]:
lib.+=(1, 2)
要解决此问题,请在(1,2)周围添加另一个(),如下所示:
lb += ((1, 2))
lib.+=((1, 2))