Một khối theo ý nghĩa chỉ là một hàm bất kỳ. Tôi chưa bao giờ được lập trình java, nhưng đây là một số mẫu mã cho các ngôn ngữ khác để cho bạn biết rằng các khối tương tự như truyền các hàm ẩn danh.
Ruby:
def add_5
puts yield + 5
end
add_5 { 20 }
# => 25
Javascript:
var add_5 = function(callback){
return callback.call() + 5;
}
add_5(function(){ return 20 });
// returns 25
Lua:
local function add_5(callback)
print(callback() + 5);
end
add_5(function()
return 20;
end)
-- returns 25
Nói cách khác, nếu Java hỗ trợ chức năng vô danh như thế, bạn đã cho mình một khối! Khi chúng hoạt động, chúng có thể lấy các đối số, giống như các khối. Dưới đây là một ví dụ khác về Lua:
local function add_something(callback)
callback(5/2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5
Nguồn
2009-04-20 11:30:10
Không chính xác. Groovy hỗ trợ các tham số được đặt tên để chặn. Xem: http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy
Tất nhiên Groovy hỗ trợ các tham số có tên là các khối. :-) Nhận xét của tôi là trong Groovy, nếu khối của bạn có một tham số, đặt tên nó là tùy chọn --- trong khi Ruby là bắt buộc. –
Xin lỗi, tôi đã hiểu sai :) – jiggy