2012-01-21 25 views
10

下面的代码是从我的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) 

这里找到和需要是相同的。任何人都可以帮助我理解这个问题。

回答

12

他们不是真的一样 - 这只是一个格式错误的错误信息。 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 
+0

感谢您的澄清。我应该更新到最新版本的scala。另外,我发现了一个更好的过滤方式,可以让我忽略列表元素的类型:例如list.filter(x => x._something ....) – riship89

+1

@ hrishikeshp19 Scala 2.10尚未推出。版本2.9.1是最新的,但我可以向你保证,2.10会有更好的错误信息。 –

+0

@ DanielC.Sobral我假设你的意思是'filter(t:(String,Int))'? –