2011-04-28 68 views
0

我有一些红宝石代码(1.9)等红宝石管和C扩展

@rd,@wd = IO.pipe 

def callback() 
    puts @wd.class 
    # do stuff 
end 

pid = fork do 
    @rd.close 
    register_callback(:callback) 
end 

@wd.close 
# do some stuff in parent process 

register_callback是C延伸,使得阻挡系统调用,并且在一定条件下将调用与传递的符号相关联的红宝石功能in。

但是@wd是NilClass的类型,根据我运行该程序时得到的消息,它试图访问回调函数中的@wd,这对我来说没有任何意义。任何帮助表示赞赏。在调用register_callback方法后,您可以使用以下代码:

回答

0

。剩下的代码继续执行(就像在fork中执行register_callback方法调用一样)。所以@ wd.close在你的回调被执行之前运行。因此,最后调用callback()方法时。 @wd是零(这是@ wd.close的结果)。

+0

即使取出@ wd.close后,我仍然得到NilClass – 2011-04-29 01:20:37