注意:这不是一个欺骗问题建议的dupe的答案只适用于模块,而不适用于全局命名空间,因此不完全相同。
我很惊讶我找不到这个问题的确切答案。
请注意,这个答案所建议的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"
有办法做到这一点吗?
答案似乎是"否"。不能将包的所有类都加载到全局命名空间中。至少,这并不容易。
这里的一篇帖子似乎描述了一种方式,尽管它非常丑陋。(我从JRuby Github维基上得到了这个链接)。
这种丑陋的方式看起来像这样,但它对我不起作用
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
再说一遍,这对我不起作用,但我可能把事情搞砸了。我不打算继续,因为我对在代码中加入这样疯狂的黑客行为并不感兴趣。