"Piergiuliano Bossi" <p_bossi_AGAINST_SPAM / tiscali.it> schrieb im
Newsbeitrag news:c08kj7$hnm$1 / lacerta.tiscalinet.it...
> I hope that what I'm asking doesn't sound too weird, but I'm trying to
> understand if in ruby is possible to print and evaluate an expression at
> the same time. I know for example that I can do like this:
>
> irb(main):001:0> expr = "1+2==3"
> => "1+2==3"
> irb(main):002:0> puts expr + ' ==> ' + (eval expr).to_s
> 1+2==3 ==> true
> => nil
>
> What I don't like is to specify the expression as a string. I'd rather
> prefer to manage code directly, but I don't know exactly how to print it
> and evaluate it at the same time. Ideally, I'd like to change the
> following code in order to print block body:
>
> irb(main):012:0> def evaluate(&code)
> irb(main):013:1>   p code
> irb(main):014:1>   code.call
> irb(main):015:1> end
> => nil
> irb(main):016:0> evaluate { 1+2==3 }
> #<Proc:0x02a4ea78@(irb):16>
> => true
>
> Do you see what I mean? Instead of having:
> #<Proc:0x02a4ea78@(irb):16>
> I'd like to get:
> { 1+2==3 }
> or something like that.
>
> I know that in lisp this can be easily done due to its nature (that is,
> code is data and data is code), but in ruby?

You can't without manually parsing the source file.  The closest you might
get without extra parsing might be this, but still "code" is a String:

code=<<CODE
1 + 2 == 3
CODE
puts "#{code} --> #{eval code}"

Regards

    robert