2016-03-02 76 views
0

我试图创建一个gem,我的gem需要一个不同的gem,我已经添加到gemspec中。模块自动将名称空间添加到正在调用的方法中

我的问题是,当我尝试调用里面的代码的方法,红宝石会自动将模块命名空间我打电话的方法,然后我得到一个未初始化的恒定误差。我举了一个下面发生的事情的基本例子。

的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 :: Request.execute(123)。任何帮助,将不胜感激

回答

2

尝试:

::BAZ::Request.execute(123) 

的关键词是 “常量查找操作”。我认为BAZ不裹到另一个类或模块,所以你需要寻找它的最顶层。因此,您需要加入::

现在你明白为什么请求(BAZ::Request)需要在BAZ之内。

+0

这个工作,感谢您的帮助和解释 – xeroshogun

相关问题