From: Patrick Hurley Date: 2007-09-16T08:43:48+09:00 Subject: Re: one line to print the statement AS WELL AS the evaluated value like in C On 9/15/07, Summercool wrote: > It works! both for globals and for instance variables... > but what is this call dbg{"n"} using { } instead of ( ) > does it have a name? and does any book talk about it? > > i guess there is no way to do Using other people's magic try this: require 'rubygems' require 'ruby2ruby' def annotated(&blk) # the real magic, thanks ZenSpider :-) lines = blk.to_ruby # Turn the results into an array lines = lines.split(/\n/) # Chop off the proc stuff lines = lines[1..-2] # Find longest expression in block max_width = lines.map { |l| l.size }.max # scope result, so we can be polite and return it result = nil # Process each line, why limit ourselves to one lines.each do |line| # get the result, be sure to keep the correct binding result = eval(line, blk.binding) # format and display the output line puts "#{line} #{" " * (max_width - line.size)}=> #{result.inspect}" end result end array = [1, 2, 3, 4] annotated do array.map { |v| v * 2 } array[3] + 1 end ### Needs better exception handling to be "real" ### pth