Python中有vars()方法,它返回一个将局部变量名作为键、对应值作为值的字典,因此可以像这样做:
a = 1
b = 2
"%(a)s %(b)s" % vars()
在Ruby中有一个vars()函数的类比吗?我所能想到的最接近的结构是:
local_variables.inject({}) {|res,var| res[var] = eval(var.to_s); res}
你所做的事情的 Ruby 等效方法只是:
"#{a} #{b}"
你需要 vars()
的另一个原因吗?
#!/usr/bin/env ruby
module Kernel
def vars(b)
Hash[
(b.eval('local_variables')-[:_]).
map{|v| [v,b.eval(v.to_s)]}
]
end
end
a = 10
puts vars(binding)
vars()
的正确使用方式。事实上,那样做相当糟糕。 - Devin Jeanpierre