使用 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 => "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 将多个实例变量转换为哈希的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章