模块自动将名称空间添加到被调用的方法

时间:2016-03-02 15:34:56

标签: ruby-on-rails ruby module rubygems

我正在尝试创建一个宝石,我的宝石需要一个不同的宝石,我已添加到gemspec中。

我的问题是当我尝试在代码中调用一个方法时,ruby自动将模块命名空间添加到我调用的方法中,然后我得到一个未初始化的常量错误。我给出了下面发生的事情的一个基本例子。

LIB / example_gem.rb

module FooModule

  def bar
    # this is the method I am trying to run
    BAZ::Request.execute(123)
  end
end

class Test
  include FooModule    
end

x = Test.new
x.bar

=>>>>>>>> uninitialized constant FooModule::Baz (NameError)

我不是要调用FooModule :: Baz,我想调用BAZ :: Request.execute(123)。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

尝试:

::BAZ::Request.execute(123)

关键字是"常量查找运算符"。我假设BAZ没有包装到另一个类或模块中,因此您需要在最顶层查找它。因此,您会添加::

现在您了解为什么请求(BAZ::Request)必须在BAZ内。