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:
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…
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
Interesting solution. The solution would be even better if ruby had a
Proc#to_str method built in or if #to_a returned a sexpr (à la lisp)
that could be easily manipulated, printed, and evaluated.
Interesting solution. The solution would be even better if ruby had a
Proc#to_str method built in or if #to_a returned a sexpr (à la lisp)
that could be easily manipulated, printed, and evaluated.
I agree - it would be nice if this was built-it. However, you can get
it with ParseTree: