2012-01-21 5 views
10

次のコードは、私のREPLからです同じです。Scalaのエラー:発見し、必要が

ここに発見し、必要な
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ではより良いエラーメッセージが表示されます。

基本的に1つはタプルであり、もう1つは2パラメータの引数リストです。具体的に:

words.zipWithIndex // Creates a tuple 

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

次の2つの方法でそれを修正することができます:明確化のため

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

感謝。私はおそらくスカラの最新バージョンに更新する必要があります。また、フィルタリングの方法がわかりました。リストの要素のタイプを無視することができます。 list.filter(x => x._something ....) – riship89

+1

@ hrishikeshp19 Scala 2.10はまだ利用できません。バージョン2.9.1が最新ですが、私は2.10がより良いエラーメッセージを表示することを保証します。 –

+0

@ DanielC.Sobral私は 'filter(t :(String、Int))'を意味すると仮定していますか? –

関連する問題