2012-01-21 4 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은 더 나은 오류 메시지를 표시합니다.

기본적으로 하나는 튜플이고 다른 하나는 2- 매개 변수 목록입니다. 특히 :

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

감사합니다. 아마도 최신 버전의 스칼라로 업데이트해야합니다. 또한 필터링의 더 나은 방법을 통해 목록 요소의 유형을 무시할 수 있습니다. 예 : list.filter (x => x._something ....) – riship89

+1

@ hrishikeshp19 Scala 2.10은 아직 사용할 수 없습니다. 버전 2.9.1이 최신 버전이지만 2.10에 더 나은 오류 메시지가 표시됩니다. –

+0

@ DanielC.Sobral 당신이'filter (t : (String, Int))'를 사용한다고 가정하고 있습니까? –