2012-08-06 14 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)) 

Agregar (3, 4) no funciona, ¿por qué?Agregar una tupla a un conjunto no funciona

Normalmente, (3, 4) también representa una tupla con dos elementos.

Respuesta

19

El problema es que existe en el rasgo Set un método +(elem1: A, elem2: A, elems: A+) y el compilador se confunde con él. De hecho, cree que intenta utilizar este método con los parámetros 2 Int en lugar de usarlo con una tupla, como se esperaba.

Se puede utilizar en su lugar: set += (3 -> 4) o set += ((3, 4))

+0

Arggh :) ¿Cuál es el significado de los soportes y -> en la primera opción? ¿Y qué dicen los corchetes duplicados en el segundo? –

+0

(Ok tan -> es arrowAssoc y forma una relación entre los dos argumentos expresados ​​como una tupla http://www.scala-lang.org/api/current/scala/Predef$$ArrowAssoc.html) –