From: Sean O'Halpin Date: 2009-04-19T10:10:09+09:00 Subject: Re: Reffering back to caller's binding On Sat, Apr 18, 2009 at 6:16 PM, Owein Herrmann wrote: > Hello Rubyists, > > I am trying to define a helper method which displays a ruby expression > and then displays the results of that expression via puts. Initially I > did this, which obviously did not work: > > def peval( expression ) >  puts expression >  puts eval( expression ) >  puts "" > end > > of course when I ran it, the scope of the method does not include > objects in the calling scope... so then I realized it had to do with > bindings and I defined this: > > def peval >  f,b = yield >  puts f >  puts eval(f,b) >  puts "" > end > > and this works, but, its really ugly: > > peval { ["map.inspect", binding()] } > > so my question is, is there a way to obtain the caller's binding so that > I do not have to specify it in the call? Is this in Pickaxe and I spaced > out on that section? I eally just want to be able to specify the > expression (in quotes), get it to display, see the results, move on... Explicitly specify the block parameter and use its #binding method to get the binding for where the block was defined, i.e. def peval(&block) f,b = block.call puts f puts eval(f,block.binding) puts "" end peval { ["var.inspect"] } OUTPUT: var.inspect [1, 2, 3] Regards, Sean