ruby – method_missing中的堆栈级别太深

我有以下
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

最佳答案 当你遇到堆栈级别太深的错误时,通常意味着你没有为递归方法正确编写你的不变量,并且ruby被递归地调用所述方法无限制地填充,填满为堆栈分配的内存.

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

这正是你发生的事情,除非你没有明确地递归调用method_missing,你是隐式调用它.您可能在method_missing中调用了一个不存在的方法.检查方法是否存在.

具体来说,方法respond_to不存在,我想你的意思是respond_to?.

点赞