匿名 Scala 函数中的块语句
Block statements in anonymous Scala function
我创建了这个简单的匿名函数
var b = (x : Int) => if(x % 2 == 0) x + 1 else x
而且效果很好。之后,我尝试在 if 之后和 x+1
语句之前添加另一个语句。
var b = (x : Int) => if(x % 2 == 0) println(x) x + 1 else x
然后我收到以下编译器错误
Cannot resolve symbol x
谁能告诉我为什么会这样?
用这个。您需要大括号来表示这些是多行:
var b = (x : Int) => if(x % 2 == 0) {
println(x)
x + 1
} else x
或者你可以这样做..你需要放那个分号来向编译器表明它们是单独的语句:
var b = (x : Int) => if(x % 2 == 0) { println(x); x + 1 } else x
发生这种情况的原因是尽管 Scala 大多数时候不需要使用分号(与 Java 不同),因为编译器更有能力推断 statements/expressions 结束的位置,如果你在 1 行有 2 statements/expressions 那么你需要为编译器将它们分开。
你的第一个匿名函数可以工作,因为 if(x % 2 == 0) x + 1 else x
是 1 个表达式。
编译器抱怨第二个,因为 if(x % 2 == 0) println(x)
被认为是 1 条语句。因此,下一条语句开始,现在 x
.
没有上下文
其他发布者为您提供了将函数右侧分解为单独语句的解决方案,因此我不会重复 - 只是添加解释为什么会出现编译错误,因为您说您正在学习该语言. Google关于在 Scala 中使用分号以了解更多信息。
我创建了这个简单的匿名函数
var b = (x : Int) => if(x % 2 == 0) x + 1 else x
而且效果很好。之后,我尝试在 if 之后和 x+1
语句之前添加另一个语句。
var b = (x : Int) => if(x % 2 == 0) println(x) x + 1 else x
然后我收到以下编译器错误
Cannot resolve symbol x
谁能告诉我为什么会这样?
用这个。您需要大括号来表示这些是多行:
var b = (x : Int) => if(x % 2 == 0) {
println(x)
x + 1
} else x
或者你可以这样做..你需要放那个分号来向编译器表明它们是单独的语句:
var b = (x : Int) => if(x % 2 == 0) { println(x); x + 1 } else x
发生这种情况的原因是尽管 Scala 大多数时候不需要使用分号(与 Java 不同),因为编译器更有能力推断 statements/expressions 结束的位置,如果你在 1 行有 2 statements/expressions 那么你需要为编译器将它们分开。
你的第一个匿名函数可以工作,因为 if(x % 2 == 0) x + 1 else x
是 1 个表达式。
编译器抱怨第二个,因为 if(x % 2 == 0) println(x)
被认为是 1 条语句。因此,下一条语句开始,现在 x
.
其他发布者为您提供了将函数右侧分解为单独语句的解决方案,因此我不会重复 - 只是添加解释为什么会出现编译错误,因为您说您正在学习该语言. Google关于在 Scala 中使用分号以了解更多信息。