2012-01-21 31 views
10

siguiente código es de mi REPL:error Scala: encontrado y son necesarios misma

scala> words.zipWithIndex.filter((x:java.lang.String,index:Int)=>index%2==0) 
<console>:9: error: type mismatch; 
found : (java.lang.String, Int) => Boolean 
required: (java.lang.String, Int) => Boolean 
words.zipWithIndex.filter((x:java.lang.String,index:Int)=>index%2==0) 

Aquí encontrado y necesarias son los mismos. ¿Alguien podría ayudarme a entender el problema?

Respuesta

12

No son realmente lo mismo, es solo un mensaje de error mal formateado. Scala 2.10 tendrá un mejor mensaje de error.

Básicamente, una es una tupla mientras que la otra es una lista de argumentos de dos parámetros. Específicamente:

words.zipWithIndex // Creates a tuple 

(x: String, index: Int) => index % 2 == 0 // is a function with two parameters 

lo puede solucionar de dos maneras:

filter((t: (String, Index)) => t._2 % 2 == 0) // use a tuple as parameter 
filter { case (x: String, index: Int) => index % 2 == 0 } // use pattern matching 
+0

Gracias por la aclaración. Debo actualizar a la versión más nueva de scala, tal vez. Además, encontré una mejor manera de filtrar, lo que me permite ignorar el tipo de elemento de lista: p. list.filter (x => x._something ....) – riship89

+1

@ hrishikeshp19 Scala 2.10 aún no está disponible. La versión 2.9.1 es la última, pero puedo asegurarle que 2.10 tendrá un mejor mensaje de error. –

+0

@ DanielC.Sobral Supongo que quería decir 'filter (t: (String, Int))'? –

Cuestiones relacionadas