Синтаксис Scala для понимания

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

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
}

person Ralph    schedule 08.02.2011    source источник


Ответы (2)


Вы почти поняли:

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.

person pedrofurla    schedule 08.02.2011

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

разрешение:

(a,0)
(b,1)
(c,2)
person Rustem Suniev    schedule 08.02.2011
comment
Не совсем то, что мне было нужно, но, тем не менее, хороший рерайт. - person Ralph; 08.02.2011
comment
Хотя для этого вывода хватило бы уже одного foreach(println) - person Debilski; 08.02.2011