【问题标题】:Better way to convert several instance variables into hash with ruby?使用 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 用于该等式的第二部分,但这仍然是主要问题。

【问题讨论】:

    标签: ruby-on-rails ruby hash instance-variables symbols


    【解决方案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 通常有这类东西的助手,你只需要挖掘。编码愉快!
    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2017-07-06
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多