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

これを行うべきではありません:

super.method_missing

あなたはこれを求めている:

super

どちらの場合もsuper、引数なしで使用します。これは、祖先のバージョンのメソッドを呼び出す適切な方法です。この場合はmethod_missing. しかし、あなたのバージョンmethod_missingでは、結果を冗長に呼び出しています。これは、すべての無限を取得する場所です。

于 2012-04-19T02:17:04.260 に答える
1

plus最も明白な説明は、インスタンス メソッドとして定義していない場合です。しかし、メソッドputs methodの先頭に a を追加して、何が起こっているかを確認してみませんか?method_missing

于 2012-04-19T02:13:58.130 に答える