Ruby 1.9.3:在创建新对象时收到Stack Level Too Deep错误

时间:2013-03-28 01:28:57

标签: ruby

我不是Ruby的专家,但是我试图在某些脚本中跟踪问题,并且无法联系到这个特定脚本的专家来了解我们为什么会收到此错误。我把事情缩小到这个特定的功能,从我所知道的,第一个打印语句发生但是结束打印语句没有。只有当此函数完全存在时,才会发生堆栈级别太深的错误:

def load_power_ports(io_info)
  return if !io_info
  io_info.each_key do |key|
    print key
    if !@power_controllers[key.to_s.downcase]
      @power_controllers[key.to_s.downcase] = Object.const_get($equipment_table['power_controller'][key.to_s.downcase][0].driver_class_name).new($equipment_table['power_controller'][key.to_s.downcase][0])
    end
  end
  print "end of equipment power block"
rescue Exception => e
  raise e.to_s + "\nUnable to create power controller: " + io_info.to_s
end

print语句仅用于查看正在传递的信息,程序获取的距离以及正在执行的迭代。

1 个答案:

答案 0 :(得分:1)

driver_class_name的构造函数是直接还是间接调用load_power_ports?如果是这样的话,你最终会得到无限的递归,这会让你的堆栈溢出(讽刺的是)。这是我能看到你可能遇到这个问题的唯一地方。