[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Block binding does not contains local variable

Artem Voroztsov

4/18/2008 9:54:00 AM

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:

2 Answers

David A. Black

4/18/2008 11:06:00 AM

0

Hi --

On Fri, 18 Apr 2008, Artem Voroztsov wrote:

> 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:

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

--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.r... for details and updates!

Artem Voroztsov

4/20/2008 7:33:00 AM

0

Thank you!