无法发现堆栈级别太深的错误

时间:2018-04-26 09:52:45

标签: ruby-on-rails ruby yaml

我试图做一个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时,堆栈级别太深了。

1 个答案:

答案 0 :(得分:3)

您的重复pathifize调用将原始hash(以及为什么嵌套哈希创建无限递归)作为参数,而它可能需要value:< / p>

pathifize(value, results, combined_key, b)