From: "David A. Black" Date: 2008-04-18T20:06:19+09:00 Subject: Re: Block binding does not contains local variable 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.rubypal.com for details and updates!