论坛首页 编程语言技术论坛

DRB时mixin的疑惑,是个bug?

浏览 1869 次
精华帖 (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 也不应该调用本地的呀
   发表时间:2008-04-17  
所谓的远程方法的调用其实就是对DRbObject的方法调用,真正的调用远程方法是通过method_missing激活的,本地有了自然调用本地的
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics