python - 在 Ruby 中是否有 Python 的 vars() 方法的模拟?

标签 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}

最佳答案

你可以像这样实现它,但它不是很漂亮。正如 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)

关于python - 在 Ruby 中是否有 Python 的 vars() 方法的模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549006/

相关文章:

ruby-on-rails - 为什么我在安装 PaperClip 时得到一个 "undefined method for ` has_attached_file`?

ruby - 使用 systemu 而不是 open3 的好处?

Python selenium 获取元素的位置

python - 运行 Keras/tensorflow-gpu 时 GPU 崩溃,特别是当时钟速度以 0 MHz 空闲时

python - IP 地址或 CIDR block 匹配正则表达式

python - 根据 pandas 中另一列的值添加一列的值

ruby - 配置思维 sphinx 和飞行 sphinx 时出错

Ruby:如何写 `String#scrub` 和 `Object#presence` ?

ruby - 如果超过 5 秒,如何退出使用 Ruby 运行的进程?

python - 如果在当前模型中找不到,则访问一对一链接模型的所有属性