2011-02-08 21 views
7

En el siguiente código, dentro de la for comprensión, que puede referirse a la cadena y el índice de uso de una falta de referencia tupla:Scala para la comprensión de la sintaxis

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

¿Hay alguna forma en la sintaxis Scala tener la stringWithIndex dividir en las partes (cadena e índice) dentro del for encabezado de comprensión, por lo que los lectores del código no tienen que preguntarse los valores de stringWithIndex._1 y stringWithIndex._2?

He intentado lo siguiente, pero no sería compilar:

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

Respuesta

21

Casi se tiene:

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 

Véase, sin necesidad de case palabra clave.

+1

Doh! Debería haber intentado eso :-). – Ralph

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

res:

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

No es exactamente lo que necesitaba, pero una buena reescritura, sin embargo. – Ralph

+2

Aunque para esa salida, un solo 'foreach (println)' ya habría sido suficiente ... – Debilski

Cuestiones relacionadas