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

使用しない場合{}は、1 つの式しか使用できず、val b = a * 2; b + 22 つの式になるためです。パーサーは次のように考えます。

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

b + 2

bスコープ内に がなく、式の型が s の型val b = a * 2;を満たさない Unit であるため、これはコンパイルされませんfunc4

それ以外は、func 1 ~ 3 は同等です。

于 2013-11-06T20:43:27.657 に答える