Я всегда задавался вопросом, почему иногда с литералами функций мы можем игнорировать фигурные скобки даже для нескольких операторов. Чтобы проиллюстрировать это, синтаксис для литерала многострочной функции заключается в заключении операторов с фигурными фигурными скобками. Таким образом,
val fl = (x: Int) => {
println("Add 25 to "+x)
x + 25
}
Однако, когда вы передаете его функции с одним аргументом, вы можете игнорировать требуемую фигурную скобку для литерала функции.
Итак, для данной функции 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
}
Вышеприведенный код более читабельен, и я замечаю, что многие примеры используют этот синтаксис. Однако есть ли какое-то специальное правило, которое я, возможно, пропустил, чтобы объяснить, почему это работает по назначению?