在Ruby中是否有类似Python的vars()方法?

时间:2010-08-23 15:23:59

标签: python ruby

在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}

2 个答案:

答案 0 :(得分:1)

你正在做的红宝石只是

"#{a} #{b}"

还有其他原因需要vars()吗?

答案 1 :(得分:1)

你可以实现这样的东西,但它不是很漂亮。正如gnibbler指出的那样,使用插值更容易。关于我看到做这样的事情的唯一优势是格式字符串是否多次格式化相同的值。即便如此,使用自定义哈希(而不是将变量转储到格式化程序中)或将其抽象为方法可能更容易。

#!/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)