Zawsze zastanawiałem się, dlaczego czasami z literałami funkcji możemy zignorować nawias klamrowy nawet dla wielu instrukcji. Aby to zilustrować, składnia literału funkcji multilinii polega na zamknięciu instrukcji za pomocą nawiasów klamrowych. Jak tak,Funkcja Multiline dosłownie jako argumenty w Scala
val fl = (x: Int) => {
println("Add 25 to "+x)
x + 25
}
Jeśli jednak przekazać go do funkcji jednego argumentu, można zignorować wymaganą nawias klamrowy dla funkcji dosłownym.
Więc dla danej funkcji f,
def f(fl: Int => Int) {
println("Result is "+ fl(5))
}
Można zadzwonić f(), tak jak to,
f(x=> {
println("Add 25 to "+x)
x + 25
})
-------------------------
Add 25 to 5
Result: 30
Albo kiedy używasz nawiasów klamrowych zamiast nawias w wywołaniu funkcji, można usuń wewnętrzne nawiasy klamrowe z literału funkcji. Tak więc poniższy kod będzie działał,
Powyższy kod jest bardziej czytelny i zauważam, że wiele przykładów używa tej składni. Czy istnieje jednak jakaś specjalna reguła, którą mogłem pominąć, aby wyjaśnić, dlaczego działa ona zgodnie z zamierzeniami?
To wyjaśnienie szukałem. Oprócz podsekcji podświetlonej specyfikacji można również zapoznać się z sekcją Bloki (6.11), aby lepiej zrozumieć. – jafaeldon
Odpowiedź Geata, nie mogłem tego lepiej wyjaśnić. Wznowiono to. Twoje zdrowie! – wleao