Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module jruby包含java类性能与包含包_Module_Jruby_Jrubyonrails - Fatal编程技术网

Module jruby包含java类性能与包含包

Module jruby包含java类性能与包含包,module,jruby,jrubyonrails,Module,Jruby,Jrubyonrails,我有一个jruby rails应用程序,在lib中有一个ruby模块,该模块是我的java对象的名称间隔,这样我就不会有冲突 我想知道在模块中包含特定类和包含包之间有什么区别。我在下面包含了示例代码 例如,在控制台中,当我说MyMod::并点击tab时,它有(例如)101个方法和类选项,其中MyMod::MyClass就是其中之一 例如,当我点击MyMod::and选项卡时,它只有100个方法/类选项,不包含MyClass。如果我接着去引用MyMod::MyClass,然后再次运行MyMod::

我有一个jruby rails应用程序,在lib中有一个ruby模块,该模块是我的java对象的名称间隔,这样我就不会有冲突

我想知道在模块中包含特定类和包含包之间有什么区别。我在下面包含了示例代码

例如,在控制台中,当我说MyMod::并点击tab时,它有(例如)101个方法和类选项,其中MyMod::MyClass就是其中之一

例如,当我点击MyMod::and选项卡时,它只有100个方法/类选项,不包含MyClass。如果我接着去引用MyMod::MyClass,然后再次运行MyMod::选项卡,我现在有101个选项,MyClass被列出

这是我的问题。在我的模块(如示例1)中立即引用这些类与按需加载它们(如示例2)之间有什么区别。如果我有一个包含大约20个我使用的类的包,那么最好是按需加载还是提前加载,以及按需加载有没有开销,如示例2所示

示例代码:

例1

vs 例2


我得到的结果略有不同。也许您使用的是不同的自动补全器

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*

至于你的问题,我不能肯定。但是如果我不得不猜测的话,我会说,由于ruby是动态的,所以这两种方法都不会预先加载任何东西。

如果你真的要使用一个类,那么在某个时候它会让你付出一些代价。不管是专门加载还是按需加载。我认为,对于您的两个示例,如果您确实使用了
MyClass
,则没有区别。另一方面,如果从未使用过
MyClass
,那么示例1显然是在浪费一些东西


另外,
include\u package
并不能真正将整个包都拉进去,而是有点像在需要类时建立一个搜索范围。一般情况下,不建议使用
include\u软件包
。请参阅以了解其存在的问题。

我正在使用rails控制台。我刚刚用两个rb文件尝试了您的示例,它们是根据您的规范创建的,具有相同的结果,但是方法似乎没有列出该模块的可用类。这里是我的控制台的一些输出>>MyMod.methods.size=>161>>OtherMod.methods.size=>161>>MyMod::显示所有162种可能性?(y或n)>>OtherMod::显示所有161种可能性?(y或n)哎呀。。。格式不太好,我想你会明白的,不过>>显然是控制台提示。非常感谢。我并不是真的在ruby中扩展或重写任何java代码,这正是该bug所涉及的,我只是包含了这些包,这样我就可以引用它们了,不过很高兴知道。
module MyMod
  include_package "my.package"
end
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*