From: yermej Date: 2007-11-26T13:45:03+09:00 Subject: Re: Printing variable name and value On Nov 25, 9:54 pm, Adam Bender wrote: > Note: parts of this message were removed by the gateway to make it a legal Usenet post. > > Hi, I want a function that will pretty-print the name and value of a > variable, so I can avoid writing things like: > puts "x is #{x}" > > Ideally, I would just be able to pass the variable, or at most a label, to a > function, and have it do this for me. I wrote something that almost works; > I have to pass the current binding as well. Is there a way to avoid this? > Is there a better way to do what I've done below? Thanks, > > Adam > > =============================== > > #!/usr/bin/ruby > > def pprint(label, bind) > typ = eval(label.to_s, bind).class.name > case typ > when "Array" > arr = eval(label.to_s, bind) > puts label.to_s + " is [" + arr.join(", ") + "]" > > when "Hash" > hash = eval(label.to_s, bind) > puts label.to_s + " is {" + > hash.collect { |k, v| "#{k} => #{v}" }.join(", ") + "}" > > when "Fixnum" > puts label.to_s + " is " + eval(label.to_s, bind).to_s > > when "String" > puts label.to_s + " is " + eval(label.to_s, bind) > > else > puts "unknown type: #{typ}" > end > end > > a = 3 > pprint :a, binding > > y = "aasdf" > pprint :y, binding > > x = [1, 2, 3] > pprint :x, binding > > z = {'a' => 1, 'b' => 3} > pprint :z, binding Check the group archives as this was discussed recently. The example you gave could be written as: def pprint(label, bind) puts "#{label} is #{eval(label.to_s, bind).inspect}" end Jeremy