2011-02-08 4 views
7

В следующем коде внутри for понимания, я могу сослаться на строку и индекс с использованием кортежа разыменования:Scala для-понимания синтаксиса

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

Есть ли способ в синтаксисе Scala, чтобы иметь stringWithIndex разбиты на части (строка и индекс) в заголовке осмысления for, чтобы читатели кода не задумывались о значениях stringWithIndex._1 и stringWithIndex._2?

Я попытался следующие, но это не будет составлять:

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

ответ

21

Вы почти получилось:

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 

Зе, нет необходимости в case ключевого слова.

+1

DOH! Я должен был попробовать это :-). – Ralph

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

разрешение:

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

Не совсем то, что мне было нужно, но хороший переписывать, тем не менее. – Ralph

+2

Хотя для этого вывода один 'foreach (println)' уже был бы достаточно ... – Debilski

Смежные вопросы