2010-01-14 88 views
0

我有一個jruby rails應用程序與lib中的ruby模塊是名稱間距我的Java對象,所以我沒有衝突。jruby包括java類的性能vs包括一個包

我想知道包括該模塊中的具體類和包括包之間的區別是什麼。我已經在下面包含了示例代碼。

在控制檯中,對於示例1當我說MyMod ::和hit選項卡時,它具有(例如)使用MyMod :: MyClass作爲其中一個的101個方法和類選項。

對於示例2,當我點擊MyMod ::和tab時,它只有100個方法/類選項,它不包含MyClass。如果我然後去引用MyMod :: MyClass,然後再次運行MyMod :: tab,我現在有101個選項,並列出MyClass。

這是我的問題。在我的模塊à01 示例1中立即引用這些類別與將它們按需加載如示例2之間有什麼區別。如果我有大約20類,我使用的軟件包,是它優選具有他們按需加載或前面,並且沒有任何開銷加載此點播,點菜例2

示例代碼:

例1

module MyMod 
    MyClass = Java::my.package.MyClass 
    .... 
end 

VS 例2

module MyMod 
    include_package "my.package" 
end 

回答

1

如果你真的要使用一門課,它會花費你一些東西。無論是專門加載還是按需加載都無關緊要。我想爲你的兩個例子,如果你使用MyClass,那麼沒有什麼區別。另一方面,如果從未使用MyClass,那麼示例1顯然在浪費一些東西。

此外,include_package並不真正拉動整個包裝,但有點像建立一個搜索範圍,當需要一個類。一般不建議使用include_package。有關它的問題,請參閱JRUBY-2376

+0

非常感謝。我沒有真正擴展或覆蓋任何Java代碼在我的紅寶石,這是錯誤似乎涉及,我真的只包括包,所以我可以參考他們,雖然很好知道。 – brad 2010-01-15 14:16:58

0

我得到了稍微不同的結果。也許你正在使用不同的自動完成程序?

irb(main):001:0> module MyMod;MyClass = Java::JavaUtil::Date;end 
=> Java::JavaUtil::Date 
irb(main):002:0> module OtherMod;include_package "Java.Util";end 
=> nil 
irb(main):003:0> MyMod.methods.size 
=> 109 
irb(main):004:0> OtherMod.methods.size 
=> 109 
irb(main):005:0> require 'irb/completion' 
=> true 
irb(main):006:0> MyMod:: 
Display all 110 possibilities? (y or n) 
irb(main):006:0> OtherMod:: 
Display all 109 possibilities? (y or n) 
irb(main):006:0> OtherMod:: 
irb(main):007:0* 

至於你的問題,我不確定。但是如果我不得不猜測,那麼就說紅寶石是動態的,這兩種方法都沒有預先加載任何東西。

+0

我正在使用導軌控制檯。我只是嘗試了你的例子,創建了兩個具有相同結果的rb文件,但是方法似乎沒有列出該模塊的可用類。下面是我的控制檯一些輸出 >> MyMod.methods.size => 161 >> OtherMod.methods.size => 161 >> MyMod :: 顯示所有162的可能性? (y或n) >> OtherMod :: 顯示全部161種可能性? (y或n) – brad 2010-01-15 14:13:06

+0

oops ...這不是格式太好,我認爲你明白了>>顯然是控制檯提示 – brad 2010-01-15 14:14:55