Giu*_*iti 1 scala anonymous-function
我创建了这个简单的匿名函数
var b = (x : Int) => if(x % 2 == 0) x + 1 else x
Run Code Online (Sandbox Code Playgroud)
它很棒.之后,我尝试在if和x+1语句之前添加另一个语句.
var b = (x : Int) => if(x % 2 == 0) println(x) x + 1 else x
Run Code Online (Sandbox Code Playgroud)
并且在那一点上我收到了以下编译器错误
无法解析符号x
请任何人都可以告诉我为什么会这样吗?
用这个.你需要大括号来表明这些是多行:
var b = (x : Int) => if(x % 2 == 0) {
println(x)
x + 1
} else x
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做..你需要把那个半冒号指示给编译器它们是单独的语句:
var b = (x : Int) => if(x % 2 == 0) { println(x); x + 1 } else x
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是虽然Scala大多数时候都不需要使用分号(与Java不同),因为编译器更能用于推断语句/表达式的结束位置,如果在1行上有2个语句/表达式那么你需要为编译器分开它们.
你的第一个匿名函数if(x % 2 == 0) x + 1 else x是1表达式.
编译器正在向第二个抱怨,因为它if(x % 2 == 0) println(x)被认为是1个语句.因此,下一个语句开始,现在没有上下文x.
其他海报给了你一个解决方案,将函数的右侧分解为单独的语句,所以我不会重复 - 只是添加一个解释为什么编译错误发生,因为你说你正在学习语言.谷歌在Scala中使用分号来了解更多信息.