Скала для понимания броска ошибки для карты - PullRequest
1 голос
/ 15 мая 2019

У меня есть фрагмент кода ниже, обычный цикл for работает нормально.Но для понимания выдает ошибку

println("Using for loop")
for( (key, value) <- orec.groupBy(x => x.continent) )
  {
  println(key + value.length )
}

println("Using for comprehension")
for{
  (key, value) <- orec.groupBy(x => x.continent)
  println(key + value.length )
} yield (key,value)

Сообщение об ошибке:

Error:(84, 5) '<-' expected but '}' found.
    } yield (key,value)

Я не мог понять, что не так с кодом.Пожалуйста, помогите в решении проблемы

Ответы [ 2 ]

6 голосов
/ 15 мая 2019

println не работает в for понимании, как это.Это должно быть, как показано ниже.

for {
  (key, value) <- orec.groupBy(x => x.continent)
  _ = println(key + value.length )
} yield (key,value)
  1. A для понимания всегда должен начинаться с <- в его первом утверждении, которое создает контекст для оставшегося следующего выражения. </p>

  2. Все <- в пределах понимания flatMap ожидают последнего, которое map.

Вы должны использовать _ = для побочных эффектовкоторый не соответствует начальному контексту, установленному для понимания.

Я рекомендую этот учебник .Это объясняет для понимания более элегантно.

2 голосов
/ 15 мая 2019

Вы не можете иметь такие отпечатки внутри для понимания, вы можете использовать их так:

for{
  (key, value) <- orec.groupBy(x => x.continent) 
} yield println(key + value.length )
...