Closure là một khối code mang theo scope tại nơi nó được định nghĩa — nó "đóng gói" (closes over) các biến local xung quanh và truy cập chúng ngay cả khi scope gốc đã thoát.
Trong Ruby, proc, lambda và block đều là closure. Block tuy không phải object nhưng vẫn capture binding của nó.
ruby
def make_counter
count = 0
increment = lambda { count += 1; count }
decrement = lambda { count -= 1; count }
[increment, decrement]
end
inc, dec = make_counter
inc.call # => 1
inc.call # => 2
dec.call # => 1
# count tồn tại trong closure dù make_counter đã returnClosure dùng để làm gì: factory function, callback giữ state, DSL, memoization.