我有一个jruby rails应用程序,在lib中有一个ruby模块,它是我的java对象的名称空间,所以我没有冲突。
我想知道在该模块中包含特定类和包含包之间的区别。我在下面列出了示例代码。
在控制台中,对于示例1 ,当我说MyMod ::并点击标签时,它有(例如)101个方法和类选项,MyMod :: MyClass就是其中之一。
对于示例2 ,当我点击MyMod :: and tab时,它只有100个方法/类选项,并且它不包含MyClass。如果我然后去引用MyMod :: MyClass,那么再次运行MyMod :: tab,我现在有101个选项并且列出了MyClass。
这是我的问题。在我的模块àla示例1 中直接引用这些类与在示例2 之后按需加载它们之间的区别是什么。如果我有一个包含大约20个类的包,我是否优先按需或预先加载它们,并且按需加载它是否有任何开销,例如示例2
示例代码:
示例1
module MyMod
MyClass = Java::my.package.MyClass
....
end
VS 示例2
module MyMod
include_package "my.package"
end
答案 0 :(得分:1)
如果你真的打算上课,那么在某些时候会花费你一些钱。无论是专门加载还是按需加载都无关紧要。我想对于你的两个例子,如果你使用MyClass
,那么没有区别。另一方面,如果从未使用过MyClass
,那么示例1显然是在浪费一些东西。
此外,include_package
并没有真正提取整个包,但有点像在需要类时建立搜索范围。通常不建议使用include_package
。有关问题,请参阅JRUBY-2376。
答案 1 :(得分: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*
关于你的问题,我不确定。但是,如果我不得不猜测,dd说,因为红宝石是动态的,所以这两种方法都没有预先加载任何东西。