家伙.我创建了一个类:
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" }
Run Code Online (Sandbox Code Playgroud)
但是不起作用
SystemStackError: stack level too deep
Run Code Online (Sandbox Code Playgroud)
为什么?
没有为A 的实例定义define_method ,所以当你再次调用cal.sefine_method时,会再次调用= method_missing,再次=>堆栈溢出.
你需要做那样的事情
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
Run Code Online (Sandbox Code Playgroud)