0

所以我对此的研究似乎表明这里有一些东西导致了无限递归,但我不确定它是什么。谁能指出我做错了什么?

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
4

2 回答 2

1

最明显的解释是如果您没有plus定义为实例方法。但是为什么不在puts method你的方法的顶部添加一个,method_missing这样你就可以看到发生了什么?

于 2012-04-19T02:13:58.130 回答
1

你不应该这样做:

super.method_missing

你要这个:

super

在这两种情况下,您都将使用super不带 args 的方法,在这种情况下,这是调用祖先版本的方法的正确方法method_missing。但是在您的版本中,您随后method_missing对结果进行了冗余调用,这就是它无限的地方。

于 2012-04-19T02:17:04.260 回答