2010-10-19 60 views
0

我有一個sinatra網絡應用程序和一個C++庫,我可以使用swig創建的綁定在sinatra(ruby)中'需要'。SWIG:Ruby過載問題

我也有第二個 - 非常相似的庫,其中函數名稱部分與第一個相同。當我需要它們時,首先加載的那個'勝利',即對不明確的函數名稱的調用總是映射到這個庫。

原因是'require'只會加載尚未加載的東西,而'load'無論如何都會重新加載。然而,'load'似乎不適用於.so文件,只適用於ruby源文件。任何幫助?

謝謝

回答

0

require看起來$」陣列,以確定是否模塊should be reloaded.你可以嘗試將其刪除,並要求。不知道這是否會爲您的使用情況下工作,不過,因爲它似乎命名空間仍可以留給污染

irb(main):001:0> require 'mysql' 
=> true 
irb(main):002:0> require 'mysql' 
=> false 
irb(main):003:0> $".delete('mysql.so') 
=> "mysql.so" 
irb(main):004:0> require 'mysql' 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlRes 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlField 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlError 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant VERSION 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_CONNECT_TIMEOUT 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_COMPRESS 
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_NAMED_PIPE 
<snip> 
=> true 
+0

在我的情況沒有幫助:。:-(後刪除從$條目」,我現在還不能重裝 IRB(主要):004:0>需要「libbbrc /bbrc.so' => false – 2010-10-20 11:30:36

+0

它在這裏工作!請參閱,是否n amespace被污染。對於之前的評論感到抱歉。 – 2010-10-20 11:36:18