人。我创建了一个类:
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
为什么?
答案 0 :(得分:6)
未为A的实例定义define_method,因此当您再次调用cal.sefine_method时,再次调用cal方法_的方法,再次=>>堆栈溢出。
你需要做那样的事情
class A
def initialize &b
instance_eval &b
end
def method_missing(method_id, *args)
self.class.instance_eval do
define_method(method_id) { debugger; puts args.first }
end
end
end