注意:这是不是一个欺骗性问题!建议的欺骗回答只适用于模块,而不是全局命名空间,所以它不完全相同。
我很惊讶我找不到这个问题的可靠答案。
请注意,this answer建议的include_package
不我正在寻找的解决方案,因为它只允许您将包导入模块的命名空间。它不会加载到全局名称空间。
如果我的JRuby脚本有类似的内容:
java_import "com.example.shapes.circle"
java_import "com.example.shapes.square"
java_import "com.example.shapes.triangle"
我想做这样的事情:
java_import "com.example.shapes.*"
但这是一个语法错误,因为它似乎试图将“*
”加载为文字类名而不是通配符。
这也不起作用:
java_import "com.example.shapes"
有办法做到这一点吗?
答案 0 :(得分:2)
答案似乎是“不”。您无法将所有包的类加载到全局命名空间中。至少,不容易。
A post here似乎描述了一种方式,尽管它非常难看。 (我从JRuby Github wiki获得了该链接。
这种丑陋的方式看起来像这样,但它对我不起作用。
module M
include_package "com.example.shapes"
end
class Object
class << self
alias :const_missing_old :const_missing
def const_missing c
M.const_get c
end
end
end
Circle #should work
Triangle #should work
同样,它对我不起作用,但我可能搞砸了。我不会去追求,因为我真的不想在我的代码中加入这样的疯狂黑客。