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

时间:2019-05-15 14:15:33

标签: scala for-comprehension

我有以下代码片段,常规的for循环工作正常。 但是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 个答案:

答案 0 :(得分:6)

println不能在for理解范围内工作。应该是下面的样子。

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

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

您应使用_ =来执行与理解所建立的初始上下文不符的副作用任务。

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

答案 1 :(得分:2)

您不能在a内包含类似的打印品以进行理解,可以像这样使用它们:

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