2012-08-06 11 views
9
scala> val set = scala.collection.mutable.Set[(Int, Int)]() 
set: scala.collection.mutable.Set[(Int, Int)] = Set() 

scala> set += (3, 4) 
<console>:9: error: type mismatch; 
found : Int(3) 
required: (Int, Int) 
       set += (3, 4) 
       ^

scala> set += Tuple2(3, 4) 
res5: set.type = Set((3,4)) 

Nie działa dodawanie (3, 4) - dlaczego?Dodawanie krotki do zestawu nie działa

Normalnie, (3, 4) również reprezentuje krotkę z dwoma elementami.

Odpowiedz

19

Problem polega na tym, że istnieje w metodzie cecha metody +(elem1: A, elem2: A, elems: A+) i kompilator jest niejasny. W rzeczywistości uważa, że ​​spróbujesz użyć tej metody z parametrami 2 Int zamiast używać jej z krotką, zgodnie z oczekiwaniami.

można użyć zamiast: set += (3 -> 4) lub set += ((3, 4))

+0

Arggh :) Co to ma znaczyć wsporników oraz -> w pierwszej opcji? A co właściwie mówią dwa nawiasy klamrowe w drugim? –

+0

(Ok so -> is arrowAssoc i tworzy relację między dwoma argumentami wyrażonymi jako krotka http://www.scala-lang.org/api/current/scala/Predef$$ArrowAssoc.html) –

Powiązane problemy