用于 Map 的理解抛出错误的 Scala

scala for comprehension throwing error for Map

我有下面的代码片段,常规的 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)

我不明白代码有什么问题。请帮助解决问题

for comprehension 中不能有这样的打印,你可以这样使用它们:

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

printlnfor 理解范围内不起作用。它应该像下面这样。

for {
  (key, value) <- orec.groupBy(x => x.continent)
  _ = println(key + value.length )
} yield (key,value)
  1. for comprehension 在其第一个语句中始终以 <- 开头,该语句为后面的其余表达式创建上下文。

  2. 理解中的所有 <- flatMap 期望最后一个 map.

对于不符合由 for comprehension 建立的初始上下文的副作用任务,您应该使用 _ =

我推荐这个 tutorial。它更优雅地解释了理解。