【发布时间】:2016-01-04 16:06:18
【问题描述】:
我有以下代码,它采用哈希并将所有 值 转换为字符串。
def stringify_values obj
@values ||= obj.clone
obj.each do |k, v|
if v.is_a?(Hash)
@values[k] = stringify_values(v)
else
@values[k] = v.to_s
end
end
return @values
end
所以给出以下哈希:
{
post: {
id: 123,
text: 'foobar',
}
}
我得到以下 YAML 输出
--- &1
:post: *1
:id: '123'
:text: 'foobar'
当我想要这个输出时
---
:post:
:id: '123'
:text: 'foobar'
看起来该对象已被展平,然后被赋予了对其自身的引用,这导致我的规范中出现堆栈级别错误。
如何获得所需的输出?
【问题讨论】:
-
你有什么问题?
-
为什么要使用实例变量?
-
这样每次它在方法上递归时都会将返回结果附加到实例变量并使用对象参数构建它
-
实例变量搞砸了,因为在调用 .each 期间,@result 的值可能会发生变化,因此您最终会将数据附加到错误的位置
标签: ruby-on-rails ruby hash