gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:59 26 4
gpt4 key购买 nike

我正在创建一个奇怪的类,我想在其中捕获发送到该类对象的每个方法。我可以使用 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

关于Ruby:捕获发送到对象的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com