元组2和元组的两个元素:它们的区别是什么?

时间:2013-02-05 04:30:26

标签: scala

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

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

2 个答案:

答案 0 :(得分:9)

Brian的答案是对的,但我建议像这样写:

lb += 1 -> 2

AnyArrowAssoc的隐式转换,其方法为->

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