2011-02-08 33 views
7

Trong đoạn mã sau, bên trong for hiểu, tôi có thể tham khảo các chuỗi và chỉ số sử dụng một dereference tuple:Scala cho-hiểu cú pháp

val strings = List("a", "b", "c") 
for (stringWithIndex <- strings.zipWithIndex) { 
    // Do something with stringWithIndex._1 (string) and stringWithIndex._2 (index) 
} 

Có cách nào ở các cú pháp Scala để có stringWithIndex được chia thành các phần (chuỗi và chỉ mục) trong tiêu đề đọc for, để người đọc mã không phải tự hỏi tại các giá trị của stringWithIndex._1stringWithIndex._2?

tôi đã cố gắng điều sau đây, nhưng nó sẽ không biên dịch:

for (case (string, index) <- strings.zipWithIndex) { 
    // Do something with string and index 
} 

Trả lời

21

Bạn hầu như đã nhận nó:

scala> val strings = List("a", "b", "c") 
strings: List[java.lang.String] = List(a, b, c) 

scala> for ((string, index) <- strings.zipWithIndex) 
     | { println("str: "+string + " idx: "+index) } 
str: a idx: 0 
str: b idx: 1 
str: c idx: 2 

Xem, không cần case từ khóa.

+1

Doh! Tôi nên đã thử rằng :-). – Ralph

7
strings.zipWithIndex.foreach{case(x,y) => println(x,y)} 

res:

(a,0) 
(b,1) 
(c,2) 
+0

Không hoàn toàn là những gì tôi cần, nhưng viết lại đẹp, không có gì ít. – Ralph

+2

Mặc dù cho kết quả đầu ra đó, một 'foreach (println) 'đơn lẻ đã đủ… – Debilski

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