2016-11-19 45 views
-2

当我试图运行下面的代码:为什么我不能在scala中的匿名函数中使用for循环?

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

我得到以下错误:

illegal start of declaration 

,我不知道为什么。 该代码用于函数内部

+0

什么是你想在这里实现?这不是有效的scala – cheseaux

+0

为什么不是这个有效的scala?我创建一个匿名函数并使用val存储它? – orahman2

+0

不,你不是。例如,下面是一个匿名函数:'var inc =(x:Int)=> x + 1'。你的函数的参数应该是什么以及应该返回什么? – cheseaux

回答

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] 
相关问题