Ruby:捕获发送到对象的所有方法

前端之家收集整理的这篇文章主要介绍了Ruby:捕获发送到对象的所有方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个奇怪的类,我想要捕获发送到类的一个对象的每个方法.我可以使用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
原文链接:https://www.f2er.com/ruby/267385.html

猜你在找的Ruby相关文章