为什么我在scala中的匿名函数中没有for循环?

时间:2016-11-19 21:00:04

标签: scala anonymous-function

当我尝试运行以下代码时:

val anonFunc = (x: Pos): List[Pos] => {for(i <- 1 to 10){ println(i)}

我收到以下错误:

 illegal start of declaration

我不明白为什么。 此代码在函数

中使用

1 个答案:

答案 0 :(得分:2)

(1)我知道两种确保匿名函数返回类型的方法:

val f = (x: Int) => { x + 1 }: Double

val f: Int => Double = x => x + 1

(2)for理解将在撰写时Unit返回List[Pos],而不是yield。要返回真实内容,您需要使用val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }: List[Pos]

List

但是当你这样做时,你会注意到编译器不喜欢for作为返回类型,因为IndexedSeq返回的是List,而不是val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }.toList: List[Pos] 。所以你需要明确地转换它:

saveAsNewAPIHadoopFile