Printing variable name and value

A

Adam Bender

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
 
Y

yermej

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,154
Members
46,702
Latest member
LukasConde

Latest Threads

Top