Scala ошибка: найдены и требуются одинаковые

Следующий код из моего REPL:

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)

Здесь найдены и требуются одинаковые. Может ли кто-нибудь помочь мне понять проблему.

Ответ 1

Они не совсем то же самое - это просто плохо отформатированное сообщение об ошибке. Scala 2.10 будет иметь лучшее сообщение об ошибке.

В принципе, один является кортежем, а другой - списком аргументов с двумя параметрами. В частности:

words.zipWithIndex // Creates a tuple

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

Вы можете исправить это двумя способами:

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