使用 ruby​​ 将多个实例变量转换为哈希的更好方法?

Posted

技术标签:

【中文标题】使用 ruby​​ 将多个实例变量转换为哈希的更好方法?【英文标题】:Better way to convert several instance variables into hash with ruby? 【发布时间】:2011-11-30 03:20:16 【问题描述】:

我收到了格式为

的回复
 #<Response:0x000...   @first = "Charlie", @last=Kelly, ....

我需要把它变成一个哈希(对于活跃的商家)。目前我正在遍历变量并执行此操作:

response.instance_variables.each do |r|
  my_hash.merge!(r.to_s.delete("@").intern => response.instance_eval(r.to_s.delete("@"))) 
end

这行得通,它将产生:first = "charlie", :last =&gt; "kelly" ,但它似乎有点hacky和不稳定。有没有更好的方法来做到这一点?

编辑:我刚刚意识到我可以将 instance_variable_get 用于该等式的第二部分,但这仍然是主要问题。

【问题讨论】:

【参考方案1】:

Rails 在 Object 上有一个名为 instance_values 的方法。这是code on GitHub。

class C
  def initialize(x, y)
    @x, @y = x, y
  end
end

C.new(0, 1).instance_values # => "x" => 0, "y" => 1
C.new(0, 1).instance_values.symbolize_keys # => :x => 0, :y => 1

【讨论】:

有什么办法可以将第一个值强制转换为符号而不是字符串?我无法触摸收到此信息的代码,并且字符串不起作用。 当然,.symbolize_keys: obj.instance_values.symbolize_keys 应该让你继续前进! 哇,完美的男人。我开始重新编写 instance_values 方法,但这更容易。格拉齐。 没问题,Rails 通常有这类东西的助手,你只需要挖掘。编码愉快!

以上是关于使用 ruby​​ 将多个实例变量转换为哈希的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 Ruby 哈希转换为 YAML

Ruby 将对象转换为哈希

如何表示将 ruby​​ 哈希转换为 yaml 的 aws 内部函数

将 Nokogiri 文档转换为 Ruby 哈希

将数组的Ruby数组转换为哈希

ruby 将嵌套数组转换为哈希