Tag: 命名空间

是否可以为子模块提供与顶级类相同的名称?

背景: ruby认为即使我指定了完整的命名空间,我也引用了顶级常量 如何在ruby中引用子模块的“完整路径”? 这是问题,简化为最小的例子: # bar.rb class Bar end # foo/bar.rb module Foo::Bar end # foo.rb class Foo include Foo::Bar end # runner.rb require ‘bar’ require ‘foo’ ➔rubyrunner.rb ./foo.rb:2:warning:Foo :: Bar引用的toplevel常量Bar ./foo.rb:2:in`include’:错误的参数类型Class(expect Module)(TypeError) 来自./foo.rb:2 来自runner.rb:2:在`require’中 来自runner.rb:2

如何解决Rails模型命名空间冲突

到目前为止的故事: 我有一个名为“Term”的模型的rails应用程序。 一切都很好,直到尝试安装黄瓜。 跑步的时候 rake cucumber 我明白了 Term is not a class (TypeError) 这是因为Cucumber包含另一个gem,’term-ansicolor’(在控制台中执行漂亮的彩色文本输出),term-ansicolor定义了一个名为“Term”的模块。 在包含Rails模型之前,Cucumber包括term-ansicolor,因此在加载“Term”模型时,“Term”已被定义为模块。 顶级模块和类在Ruby中不能具有相同的名称,因此发生冲突。 我不想重命名模型,而是开始修补term-ansicolor gem。 事实certificate这比我想象的更难。 我将Term模块名称更改为“ANSITerm”,但我无法弄清楚如何让Cucumber加载我修改过的gem,我已将其放入RAILS_ROOT / vendor / gems / term-ansicolor。 有任何想法吗? 我吠叫错了树吗?