我试图做一个flatten的变体,每个例子都有:
{a: {b: 1}}
我应该得到这个
#=> {"a.b":1}
等等
这是我的代码:
require 'active_support'
require 'active_support/core_ext'
def pathifize(hash,results = {}, current_key='', b = ".")
hash.each do |new_key, value|
combined_key = [current_key,new_key].delete_if { |k| k.blank? }.join(b)
if value.is_a?(Hash)
pathifize(hash,results, combined_key, b)
else
results[combined_key] = value
end
end
end
我在尝试测试Irb时,堆栈级别太深了。
答案 0 :(得分:3)
您的重复pathifize
调用将原始hash
(以及为什么嵌套哈希创建无限递归)作为参数,而它可能需要value
:< / p>
pathifize(value, results, combined_key, b)