我想一个红宝石方法“秀”,它做到这一点:红宝石记录便捷方法
anyobject.show
呼叫的输出将是:
anyvar => _the_ _pp_ _string_ _of_ _the_ _object_
一些接近,但不完全是:
p "any_var => #{any_var.pretty_inspect}"
既然你必须输入“anyvar”来完成。
我想一个红宝石方法“秀”,它做到这一点:红宝石记录便捷方法
anyobject.show
呼叫的输出将是:
anyvar => _the_ _pp_ _string_ _of_ _the_ _object_
一些接近,但不完全是:
p "any_var => #{any_var.pretty_inspect}"
既然你必须输入“anyvar”来完成。
一般来说,这是不能做到的,因为方法是在对象上调用的,而不是在变量上调用的。
编辑:
如果你愿意用“功能”来做到这一点,而不是一个方法,你可以将它添加到内核:
def show(var)
print "#{var} => #{eval(var).pretty_inspect}"
end
,并通过
show "anyvar"
叫它
由于需要将字符串中的变量名传递给它,这有点难看。
这应该做你在问什么。它打印关于YAML格式的对象可读信息:
puts YAML::dump(object)
所以,你的表演方法是这样的:
def show:
puts YAML::dump(self)
end
,不要忘了:
require 'yaml'
不,它没有。至少在IRB: >> A = “ASDF” => “ASDF” >>把YAML ::转储(一) --- ASDF =>零 – Gush 2009-09-28 09:38:33
小马丁的增强版之一:
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
我改了胸罩打成小包有点: DEF显示(VAR) 打印 “#{VAR} =>#{的eval(VAR).pretty_inspect}” 端 我与= 1试图在IRB会话;然后显示(“a”);并且它为您的版本返回“nil”,而对于我的版本,“a是未定义的变量”。 $ a = 1; show(“$ a”);但是,工作。 这是一个聪明 - 但有一个范围问题(不适用于局部变量)。 ? – Gush 2009-09-28 09:36:02
您需要将当前上下文的绑定传递给'show'方法:'def show(var,b);打印“#{var} =>#{eval(var,b).pretty_inspect}”;结束“,然后”显示“anyvar”,绑定“ – 2009-09-28 12:26:42