【发布时间】:2011-09-19 12:41:23
【问题描述】:
伙计们。我创建了一个类:
class A
def initialize &b
instance_eval &b
end
def method_missing method_id, *args
self.define_method(method_id) { puts args.first }
end
end
b = A.new { new_method "oops" }
但它不起作用
SystemStackError: stack level too deep
为什么?
【问题讨论】:
-
您可以在 method_missing 中添加跟踪或断点并尝试自己找出问题所在...
-
在代码中添加一些日志语句时,您会看到没有为实例定义define_method,因此是递归。在调用 define_method 之前添加
p "Begin method_missing for #{method_id}"时,您将记录很多行:Begin method_missing for define_method
标签: ruby