Block binding does not contains local variable

Maybe it contains.
But please, explain me why “block binding” does not print a, b, and c
variables.

def vars(&block)
b = block.call(55)
puts "inner binding: ", eval(“local_variables”, b)
puts "block binding: ", eval(“local_variables”, block.binding)
end

vars {|a|
b = 1
c = 2
binding
}

My output:

ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
inner binding:
c
b
a
block binding:

Hi –

On Fri, 18 Apr 2008, Artem V. wrote:

vars {|a|
b
a
block binding:

My understanding is that given a Proc, there’s no way that Ruby can
know what local variables are created inside it without running it, so
binding of the Proc itself is the binding of the local context where
it’s created. It’s only when the block is run that the local variables
inside the block get bound to anything, so binding inside the block is
a different binding and includes those variables.

You can see this if you do:

x = 1

and then call vars. block.binding will then include x.

David

Thank you!