Note: This is not a dupe question! The suggested dupe's answer only works in a module, not the global namespace, so it's not quite the same.
我很惊讶我找不到这个问题的可靠答案。
请注意 include_package
根据this answer的建议不是我正在寻找的解决方案,因为它只允许您将包导入到模块的命名空间中。它不会加载到全局命名空间中。
如果我的 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"
有办法做到这一点吗?
请您参考如下方法:
答案似乎是“不”。您无法将包的所有类加载到全局命名空间中。至少,不容易。
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
再说一遍,它对我不起作用,但我可能搞砸了一些事情。我不会继续追求,因为我对在我的代码中加入这样的疯狂黑客并不真正感兴趣。