Skip to main content
 首页 » 编程设计

jruby中我可以在 "java_import"语句中使用通配符来加载到全局命名空间吗

2024年11月01日8linjiqin

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 

再说一遍,它对我不起作用,但我可能搞砸了一些事情。我不会继续追求,因为我对在我的代码中加入这样的疯狂黑客并不真正感兴趣。