大括号里面的“整个函数VS只是函数语句”

时间:2013-11-06 19:58:01

标签: scala

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

1 个答案:

答案 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是等效的。