func1和func2 body之间有什么不同。两个编译但我无法弄清楚scala如何识别func2中的多个语句,因为在a =>
之前调整了大括号,但语句在此之后。
val func1: Int => Int = a => {
val b = a * 2
b + 2
}
val func2: Int => Int = { a =>
val b = a * 2
b + 2
}
即便是这个编译
val func3: Int => Int = { a => val b = a * 2; b + 2 }
但这个不是
val func4: Int => Int = a => val b = a * 2; b + 2
答案 0 :(得分:2)
这是因为当你不使用{}
时,你只能有一个表达式而val b = a * 2; b + 2
是两个表达式。解析器认为它类似于:
val func4: Int => Int = a => val b = a * 2;
b + 2
由于范围中没有b
且表达式val b = a * 2;
的类型为Unit,因此不能编译,因此不满足func4
类型。
除此之外,func 1到3是等效的。