我有以下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
答案 0 :(得分:2)
当你遇到stack level too deep
错误时,通常意味着你没有为递归方法正确编写你的不变量,并且ruby被递归地调用所述方法无限期地填充,填满为堆栈分配的内存。
TL; DR; 这是一个无限循环。
这正是发生在您身上的事情,除非您没有明确地递归调用method_missing
,而是隐式地调用它 。 您可能需要调用method_missing
中不存在的方法。检查方法是否存在。
具体来说,方法respond_to
不存在,我认为您的意思是respond_to?
。