Ruby:捕获发送到对象的所有方法
发布时间:2020-12-16 21:30:49 所属栏目:百科 来源:网络整理
导读:我正在制作一个奇怪的类,我想要捕获发送到类的一个对象的每个方法.我可以使用method_missing来实现我想要的大部分内容. class MyClass def method_missing m,*args # do stuff endend 那么问题就是MyClass从Object继承的所有实例方法.我可以一个接一个地遍历
我正在制作一个奇怪的类,我想要捕获发送到类的一个对象的每个方法.我可以使用method_missing来实现我想要的大部分内容.
class MyClass def method_missing m,*args # do stuff end end 那么问题就是MyClass从Object继承的所有实例方法.我可以一个接一个地遍历各种方法,重新定义它们,但我希望能够采用更灵活的方法.当我尝试触摸这些实例方法时,我尝试过的所有元编程方法都抱怨了一个NameError. 解决方法
正如@DanCheail的评论和答案所指出的那样,如果你使用ruby 1.9,你应该使用一个BasicObject而不是定义Object的方法.在1.8.x的这个发布时间仍然很普遍,即使1.9已经释放了一段时间.
而不是尝试“重新定义”任何东西,您可以将对象包装在空白(大部分)代理对象中,如下所示: class MyProxy instance_methods.each do |meth| # skipping undef of methods that "may cause serious problems" undef_method(meth) if meth !~ /^(__|object_id)/ end def initialize(object) @object = object end def method_missing(*args) # do stuff p args # ... @object.send(*args) end end MyProxy.new(MyClass.new).whatever (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |