2012-01-21 27 views
10

mã sau là từ REPL tôi:scala lỗi: phát hiện và yêu cầu là cùng

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) 

đây tìm thấy và yêu cầu đều giống nhau. Bất cứ ai có thể giúp tôi hiểu được vấn đề.

Trả lời

12

Chúng không thực sự giống nhau - đó chỉ là một thông báo lỗi được định dạng sai. Scala 2.10 sẽ có một thông báo lỗi tốt hơn.

Về cơ bản, một là tuple trong khi cái kia là danh sách đối số hai tham số. Cụ thể là:

words.zipWithIndex // Creates a tuple 

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

Bạn có thể sửa chữa nó theo hai cách:

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

Cảm ơn bạn đã làm rõ. Tôi nên cập nhật lên phiên bản mới nhất của scala có lẽ. Ngoài ra, tôi đã tìm thấy một cách lọc tốt hơn, cho phép tôi bỏ qua loại phần tử danh sách: ví dụ: list.filter (x => x._something ....) – riship89

+1

@ hrishikeshp19 Scala 2.10 chưa khả dụng. Phiên bản 2.9.1 là mới nhất, nhưng tôi có thể đảm bảo với bạn rằng 2.10 sẽ có một thông báo lỗi tốt hơn. –

+0

@ DanielC.Sobral Tôi giả sử bạn có nghĩa là 'bộ lọc (t: (String, Int))'? –

Các vấn đề liên quan