method_missing中的堆栈级别太深

时间:2015-01-01 19:21:33

标签: ruby

我有以下Ruby方法,它给出RSpec错误'堆栈级别太深'而且我不确定为什么 - 非常感谢任何帮助!

def method_missing(method_name, *args)
  full_method_name = "#{self.class.to_s.downcase}_#{method_name.to_s}"
  respond_to(:full_method_name) ? send(:full_method_name, @options) : super
end

1 个答案:

答案 0 :(得分:2)

当你遇到stack level too deep错误时,通常意味着你没有为递归方法正确编写你的不变量,并且ruby被递归地调用所述方法无限期地填充,填满为堆栈分配的内存。

TL; DR; 这是一个无限循环。

这正是发生在您身上的事情,除非您没有明确地递归调用method_missing,而是隐式地调用它 您可能需要调用method_missing中不存在的方法。检查方法是否存在。

具体来说,方法respond_to不存在,我认为您的意思是respond_to?