是否可以在 "java_import" 语句中使用通配符加载到全局命名空间中?



注意:这不是一个欺骗问题建议的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

再说一遍,这对我不起作用,但我可能把事情搞砸了。我不打算继续,因为我对在代码中加入这样疯狂的黑客行为并不感兴趣。

最新更新