Ruby DRbObject和覆盖发送
发布时间:2020-12-17 02:14:15 所属栏目:百科 来源:网络整理
导读:今天我有一个有趣的情况(简化): 我是一个类型为Adapter的通信对象,带有#send和#receive方法. 我的应用程序通过DRb与它通信. 所以在我的应用程序中,我有一个DRbObject,让我们说foo. 现在,打电话 foo.send(msg,dest) 调用DRbObject上的#send而不是Adapter. 最
今天我有一个有趣的情况(简化):
我是一个类型为Adapter的通信对象,带有#send和#receive方法. 现在,打电话 foo.send(msg,dest) 调用DRbObject上的#send而不是Adapter. 最简单的修复方法当然是重命名send方法. 你怎么看? 解决方法
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__.) 另一方面,#send是Ruby的一个非常核心的概念,可能会混淆代码的未来维护者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |