関数リテラルを使用すると、複数のステートメントであっても中括弧を無視できることがあるのはなぜだろうかといつも思っていました。これを説明するために、複数行の関数リテラルの構文では、ステートメントを中かっこで囲みます。そのようです、
val fl = (x: Int) => {
println("Add 25 to "+x)
x + 25
}
ただし、引数が 1 つの関数に渡す場合は、関数リテラルに必要な中かっこを無視できます。
したがって、与えられた関数 f に対して、
def f( fl: Int => Int ) {
println("Result is "+ fl(5))
}
このように f() を呼び出すことができます。
f( x=> {
println("Add 25 to "+x)
x + 25
})
-------------------------
Add 25 to 5
Result: 30
または、関数呼び出しで括弧の代わりに中括弧を使用する場合、関数リテラルから内側の中括弧を削除できます。したがって、次のコードも機能します。
f{ x=>
println("Add 25 to "+x)
x + 25
}
上記のコードはより読みやすく、多くの例でこの構文が使用されていることに気付きました。ただし、これが意図したとおりに機能する理由を説明するために、私が見逃した可能性のある特別なルールはありますか?