Originally published at: http://www.sitepoint.com/closures-ruby/
Some time ago, as a dyed-in-the-wool C++ programmer who was exploring the mysterious world of Ruby, I got enthralled by the concept of closures and the way the language handled them. I was already familiar with the concept of closures from my JavaScript experience, but the manner in which Ruby handles closures both perplexed and fascinated me. Years later, I decided to write an article about them and here it is.
What’s a Closure?
A closure is basically a function that:
- Can be treated like a variable, i.e. assigned to another variable, passed as a method aument, etc.
- Remembers the values of all the variables that were in scope when the function was defined and is able to access these variables even if it is executed in a different scope.
Put differently, a closure is a first-class function that has lexical scope.