0

func1 和 func2 主体有什么区别。两者都可以编译,但我不知道 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
4

1 回答 1

2

这是因为当你不使用时,{}你只能有一个表达式,并且val b = a * 2; b + 2是两个表达式。解析器认为它类似于:

val func4: Int => Int = a => val b = a * 2; 

b + 2

哪个不编译,因为b范围内没有 a 并且表达式的类型val b = a * 2;是 Unit,它不满足func4s 类型。

除此之外,func 1 到 3 是等价的。

于 2013-11-06T20:43:27.657 回答