Tôi luôn tự hỏi tại sao đôi khi với các hàm chức năng, chúng ta có thể bỏ qua dấu ngoặc nhọn ngay cả đối với nhiều câu lệnh. Để minh họa điều này, cú pháp của hàm multiline là để kèm theo các câu lệnh với các dấu ngoặc nhọn. Giống như vậy,Đa nguyên hàm theo nghĩa đen trong Scala
val fl = (x: Int) => {
println("Add 25 to "+x)
x + 25
}
Tuy nhiên, khi bạn chuyển sang hàm đơn đối số, bạn có thể bỏ qua dấu ngoặc nhọn bắt buộc cho hàm theo nghĩa đen.
Vì vậy, đối với một chức năng nhất định f,
def f(fl: Int => Int) {
println("Result is "+ fl(5))
}
Bạn có thể gọi f() như thế này,
f(x=> {
println("Add 25 to "+x)
x + 25
})
-------------------------
Add 25 to 5
Result: 30
Hoặc khi bạn sử dụng dấu ngoặc nhọn thay vì ngoặc trong cuộc gọi chức năng, bạn có thể loại bỏ các dấu ngoặc nhọn bên trong khỏi hàm hàm. Vì vậy, mã sau cũng sẽ hoạt động,
f{ x=>
println("Add 25 to "+x)
x + 25
}
Mã trên có thể đọc được và tôi nhận thấy rằng rất nhiều ví dụ sử dụng cú pháp này. Tuy nhiên, có quy tắc đặc biệt nào mà tôi có thể đã bỏ sót hay không, để giải thích tại sao điều này hoạt động như dự định?
Đây là lời giải thích tôi đang tìm kiếm. Ngoài ra, ngoài các phần của thông số bạn đã đánh dấu, bạn cũng có thể tham khảo phần Blocks (6.11) để hiểu rõ hơn. – jafaeldon
Câu trả lời gấc, tôi không thể giải thích rõ hơn. Upvoted nó. Chúc mừng! – wleao