scala错误:发现和要求相同

ris*_*p89 10 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)
Run Code Online (Sandbox Code Playgroud)

这里发现和要求是相同的.任何人都可以帮我理解这个问题.

Dan*_*ral 12

它们实际上并不相同 - 这只是一个格式错误的错误消息.Scala 2.10将有更好的错误消息.

基本上,一个是元组,而另一个是双参数参数列表.特别:

words.zipWithIndex // Creates a tuple

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

您可以通过两种方式修复它:

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
Run Code Online (Sandbox Code Playgroud)