-2
当我试图运行下面的代码:为什么我不能在scala中的匿名函数中使用for循环?
val anonFunc = (x: Pos): List[Pos] => {for(i <- 1 to 10){ println(i)}
我得到以下错误:
illegal start of declaration
,我不知道为什么。 该代码用于函数内部
当我试图运行下面的代码:为什么我不能在scala中的匿名函数中使用for循环?
val anonFunc = (x: Pos): List[Pos] => {for(i <- 1 to 10){ println(i)}
我得到以下错误:
illegal start of declaration
,我不知道为什么。 该代码用于函数内部
(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]
什么是你想在这里实现?这不是有效的scala – cheseaux
为什么不是这个有效的scala?我创建一个匿名函数并使用val存储它? – orahman2
不,你不是。例如,下面是一个匿名函数:'var inc =(x:Int)=> x + 1'。你的函数的参数应该是什么以及应该返回什么? – cheseaux