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

Anyからへの暗黙の変換があり、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)

これは実際に行われています。2つの整数引数を使用して+=メソッドを呼び出しました。ここで、1つのTuple2 [Int、Int]である必要があります。

lib.+=(1, 2)

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

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