S
Sam Sungshik Kong
Hi, group!
I am trying to understand what exactly a closure is.
I'm kinda familiar with C#.
In C# 2.0 (the next version that's coming out), there's a anonymous
delegate.
People say that it's a closure (See
http://martinfowler.com/bliki/Closures.html).
They even compare it with Ruby codes saying that closure is block.
Is it true?
When I saw the closure example in Ruby, it was not just a block.
Here's a typical example of Ruby closure.
<snip>
def makeCounter
var = 0
lambda do
var +=1
end
end
c1 = makeCounter
c1.call
c1.call
c1.call
c2 = makeCounter
puts "c1 = #{c1.call}, c2 = #{c2.call}"
</snip>
Here is what the above page(http://martinfowler.com/bliki/Closures.html)
says...
<snip>
Closures have been around for a long time. I ran into them properly for the
first time in Smalltalk where they're called Blocks. Lisp uses them heavily.
They're also present in the Ruby scripting language - and are a major reason
why many rubyists like using Ruby for scripting.
Essentially a closure is a block of code that can be passed as an argument
to a function call.
....
In a language that has Closures, in this case Ruby, I'd write this.
def managers(emps)
return emps.select {|e| e.isManager}
end
</snip>
This is just a block, right?
Is it also a closure?
I'm confused.
Can somebody enlighten me?
Sam
I am trying to understand what exactly a closure is.
I'm kinda familiar with C#.
In C# 2.0 (the next version that's coming out), there's a anonymous
delegate.
People say that it's a closure (See
http://martinfowler.com/bliki/Closures.html).
They even compare it with Ruby codes saying that closure is block.
Is it true?
When I saw the closure example in Ruby, it was not just a block.
Here's a typical example of Ruby closure.
<snip>
def makeCounter
var = 0
lambda do
var +=1
end
end
c1 = makeCounter
c1.call
c1.call
c1.call
c2 = makeCounter
puts "c1 = #{c1.call}, c2 = #{c2.call}"
</snip>
Here is what the above page(http://martinfowler.com/bliki/Closures.html)
says...
<snip>
Closures have been around for a long time. I ran into them properly for the
first time in Smalltalk where they're called Blocks. Lisp uses them heavily.
They're also present in the Ruby scripting language - and are a major reason
why many rubyists like using Ruby for scripting.
Essentially a closure is a block of code that can be passed as an argument
to a function call.
....
In a language that has Closures, in this case Ruby, I'd write this.
def managers(emps)
return emps.select {|e| e.isManager}
end
</snip>
This is just a block, right?
Is it also a closure?
I'm confused.
Can somebody enlighten me?
Sam