所以我对此的研究似乎表明,这里有一些东西导致了无限递归,但我不确定它是什么。谁能指出我做错了什么?
def initialize(_val)
@start_value = _val
end
def method_missing(method, *args)
if method.starts_with?("plus") then
num = method[4 .. method.length]
if (/^[d]+(.[d]+){0,1}$/ === num) then
number = Integer(num)
self.class_eval("def #{method}; return @start_value + x; end")
self.plus(number)
else
super.method_missing
end
else
super.method_missing
end
end
end
你不应该这样做:
super.method_missing
你想要这个:
super
在这两种情况下,您都将使用没有参数的super
,这是调用祖先版本方法的正确方法,在本例中为 method_missing
.但是在你的版本中,你会在结果上冗余地调用method_missing
,这就是它变得无限的地方。
最明显的解释是,如果您没有将plus
定义为实例方法。但是,为什么不在method_missing
方法的顶部添加一个puts method
,以便您可以看到发生了什么?