我可以在“java_import”语句中使用通配符加载到全局命名空间吗?

时间:2013-12-03 22:42:44

标签: jruby

  

注意:这是不是一个欺骗性问题!建议的欺骗回答只适用于模块,而不是全局命名空间,所以它不完全相同。

我很惊讶我找不到这个问题的可靠答案。

请注意,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"

有办法做到这一点吗?

1 个答案:

答案 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

同样,它对我不起作用,但我可能搞砸了。我不会去追求,因为我真的不想在我的代码中加入这样的疯狂黑客。