今天我有一个有趣的情况(简化):
我是一个类型为Adapter的通信对象,带有#send和#receive方法.
我的应用程序通过DRb与它通信.
所以在我的应用程序中,我有一个DRbObject,让我们说foo.
现在,打电话
foo.send(msg,dest)
调用DRbObject上的#send而不是Adapter.
解决方法
DRbObject使用#method_missing进行远程消息路由魔术.所以,显然,我们应该从foo
undefine #send方法,所以它将委托给#method_missing代替!
foo.singleton_class.class_eval {undef_method:send}
或者以面向对象的方式进行:
AdapterDRbObject < DRbObject undef_method :send end
至于你是否应该这样做,这是辩论.
覆盖/删除#send实际上是“好的”,因为每个人都是supposed知道你应该总是调用#__send__. (事实上,如果你看一下DRbObject#method_missing,它会调用#__send__.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。