2012-01-10 32 views
5

Tôi đang thực hiện các bước thú vị đầu tiên của tôi (mức độ không chào hỏi trên thế giới) với Scala (2.9.1) và tôi đang cố gắng hiểu một thông báo lỗi rất không rõ ràng. Nó đi nhiều như thế này:Scala không khớp trong khi ánh xạ Bản đồ

error: type mismatch; 
found : (Int, Array[InputEntry]) => (Int, Double) 
required: (Int, Array[InputEntry]) => ? 
entries.groupBy(grouper).map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies))) 

Như bạn có thể đoán quá trình trong đoạn này được coi là nơi mà một số chế biến tiếp diễn, và nó thực sự là một chức năng được xác định rõ với chữ ký Array[InputEntry] => Double. Thay vào đó,

Chữ ký của cá mú là Array[InputEntry] => Int.

tôi đã cố gắng để trích xuất một hàm và thay thế lambda nhưng nó là vô ích, và tôi bị mắc kẹt cố gắng để hiểu được những dấu hỏi trong các lỗi ...

Bất kỳ ý tưởng?

Chỉnh sửa: Tôi nên làm rõ rằng InputEntry là một lớp tôi đã xác định, nhưng vì mục đích của ví dụ này, có vẻ như tôi gần như không liên quan.

+0

Chúng tôi cần xem một số mã. Một phần của mã được in bằng thông báo lỗi là không đủ. Đặc biệt, chữ ký kiểu 'doMyStuff' là gì và loại biến nào bạn đang cố viết kết quả? –

+0

Bạn có chắc là thông báo lỗi không nói 'bắt buộc: ((Int, List [InputEntry])) =>? ' –

+0

Tôi đoán tôi nên làm cho nó cụ thể hơn là các mục nhập là Bản đồ. Thanks anyway – em70

Trả lời

12

này trông giống như vấn đề:

.map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies))) 

Bạn cần phải sử dụng một tuyên bố trường hợp để unapply params và gán chúng cho các biến địa phương. Bạn cũng cần sử dụng {} thay vì() vì bây giờ nó là một hàm ẩn danh.

entries.groupBy(grouper).map{case (k, ies) => (k, doMyStuff(ies))} 

Dưới đây là một ví dụ đơn giản hơn.

scala> val x = List(("a",1),("b",2)) 
x: List[(java.lang.String, Int)] = List((a,1), (b,2)) 
scala> x.map{ case (str, num) => num } 
res5: List[Int] = List(1, 2) 

Nếu bạn không muốn sử dụng tuyên bố trường hợp, bạn phải giữ bộ như một biến duy nhất.

scala> x.map(tuple => tuple._2) 
res6: List[Int] = List(1, 2) 
+0

-1: Đó là một phần của mã là đúng. –

+0

Rất tiếc, tôi đã báo cáo sai thông báo lỗi. Sau khi bạn tính đến điều này, tôi thực sự phải đưa ra +1 thay thế. –

+1

Lỗi tương ứng được đánh dấu là cố định, vì vậy nó không nên có trong phiên bản tiếp theo: https://issues.scala-lang.org/browse/SI-5067 –

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