我想一個紅寶石方法「秀」,它做到這一點:紅寶石記錄便捷方法
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