gpt4 book ai didi

Ruby DRbObject 和覆盖发送

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:35 25 4
gpt4 key购买 nike

我今天遇到了一个有趣的情况(已简化):

我有一个 Adapter 类型的通信对象,带有一个 #send 和一个 #receive 方法。我的应用程序通过 DRb 与它通信。所以在我的应用程序中,我有一个 DRbObject,假设是 foo

现在,打电话

foo.send(msg, dest)

DRbObject 上调用 #send,而不是 Adapter

最简单的解决方法当然是重命名发送方法。但是,我希望尽可能接近我的文档/底层 API。

你怎么看?我应该重命名 send 方法,还是对此有一个巧妙的(本地)hack?

最佳答案

DRbObject #method_missing 是远程消息路由魔法吗?所以,很明显,我们应该 undefine foo 中的 #send 方法,因此它将委托(delegate)给 #method_missing!


foo.singleton_class.class_eval { undef_method :send }

或者以更面向对象的方式进行:

AdapterDRbObject < DRbObject
undef_method :send
end

至于您是否应该这样做,还有待商榷。

覆盖/删除 #send 实际上“没问题”,因为每个人都是 supposed要知道您应该始终调用 #__send__。 (实际上,如果您查看 DRbObject#method_missing,它会调用 #__send__。)

另一方面,#send 是 Ruby 的一个非常核心的概念,可能会使代码的 future 维护者感到困惑。

关于Ruby DRbObject 和覆盖发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12722106/

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