【发布时间】:2012-04-19 02:10:29
【问题描述】:
所以我对此的研究似乎表明这里有一些东西导致了无限递归,但我不确定它是什么。谁能指出我做错了什么?
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
【问题讨论】:
-
这很奇怪。我希望您的代码立即抛出 NoMethodError 以在符号上调用
starts_with?。此外,您使用super错误 - 它应该只是super。通过添加.method_missing,您在调用超类的method_missing的结果上调用method_missing。
标签: ruby