2011-04-28 104 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