红宝石采伐便利方法

时间:2009-09-28 09:05:01

标签: ruby debugging variables

我想要一个ruby方法“show”来做到这一点:

anyobject.show

呼叫的输出将是:

anyvar => _the_ _pp_ _string_ _of_ _the_ _object_ 

接近但不完全是:

p "any_var => #{any_var.pretty_inspect}"

因为您必须输入“anyvar”才能完成此操作。

3 个答案:

答案 0 :(得分:3)

这应该做你所要求的。它以YAML格式打印有关对象的可读信息:

puts YAML::dump(object)

所以你的show方法看起来像这样:

def show:
  puts YAML::dump(self)
end

并且不要忘记:

require 'yaml'

答案 1 :(得分:2)

Martin的一个增强版本:

require 'pp'
def show(var,bindings) 
  print "#{var} => #{eval('var',bindings).pretty_inspect}"
end

a,t = 1,Time.now
show a,binding #=> a => 1
show t,binding #=> t => Mon Sep 28 13:12:34 +0300 2009

答案 2 :(得分:1)

通常,这是不可能的,因为方法是在对象上调用的,而不是变量。

编辑:

如果您愿意使用“函数”而不是方法,可以将其添加到内核中:

def show(var)
  print "#{var} => #{eval(var).pretty_inspect}"
end

并通过

调用
show "anyvar"

由于需要将变量名称作为字符串传递,这有点难看。

相关问题