浏览 1869 次
锁定老帖子 主题:DRB时mixin的疑惑,是个bug?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-31
http://www.iteye.com/topic/156641 现在发现有个比较灵异的现象。 DRB+mixin时会有出乎我意料的行为。 server: require 'drb' require 'module_a' class ServerHello include TestModule1 def sayHello puts 'I am server' end end DRb.start_service("druby://127.0.0.1:2222", ServerHello.new) DRb.thread.join client: require 'drb' require 'module_a' include TestModule1 DRb.start_service info = DRbObject.new(nil, "druby://127.0.0.1:2222") info.sayHello() info.sayHello2 module_a: require 'drb' module TestModule1 def sayHello2 puts "who am i" end end 这3个文件在同一个目录时,先执行server.rb,再执行client.rb。结果是: server.rb输出 I am server clietn.rb输出 who am i 而不是我想要的 server.rb同时输出: I am server who am i “info.sayHello2” 这句话居然是在本地调用的,而不是server端。 (或者更确切的说是client调到server,server再回调到client的sayHello2方法。因为假如把puts "who am i" 修改成 puts self, 输出是DRbObject) 如果我把client端的“include TestModule1”注释调,那么行为是正常的。 但是这不是我想要的,因为某些server端和client端公用的lib就是要被大家一起include的。 怎么说info.sayHello2 也不应该调用本地的呀 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-17
所谓的远程方法的调用其实就是对DRbObject的方法调用,真正的调用远程方法是通过method_missing激活的,本地有了自然调用本地的
|
|
返回顶楼 | |