2013-02-05 10 views
5

次のコードで、不一致が発生したのはなぜですか?Tuple2と2要素のタプル:その違いは何ですか?

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

答えて

7

それは実際にこれをやっている

lb += (1, 2) 

あなたの文章は、あなたはそれがあるべき2つの整数の引数、1 Tuple2 [INT、INT]で+ =メソッド呼び出した場合:

lib.+=(1, 2) 

これを修正するには、次のように(1,2)の周りにanother()を追加します。

lb += ((1, 2)) 
lib.+=((1, 2)) 
+1

落とし穴を演算子オーバーロードのことを思い出しますC++のhaha .. –

9

ブライアンの答えは正しいですが、私はそのようにそれを書くことをお勧めします:

lb += 1 -> 2 

方法->がありAnyからArrowAssocへの暗黙的なconvertionが、あります:

class ArrowAssoc[A](val x: A) { 
    def -> [B](y: B): Tuple2[A, B] = Tuple2(x, y) 
    } 
関連する問題