ruby-on-rails - 模块自动将命名空间添加到正在调用的方法中

标签 ruby-on-rails ruby module rubygems

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

我的问题是,当我尝试在代码中调用方法时,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)。任何帮助将不胜感激

最佳答案

尝试:

::BAZ::Request.execute(123)

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

现在您明白为什么请求 (BAZ::Request) 需要位于 BAZ 内。

关于ruby-on-rails - 模块自动将命名空间添加到正在调用的方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751592/

相关文章:

ruby-on-rails - 在 Rails 中,如何将 Assets 管道中的样式表作为 <style> 标记包含在内?

javascript - rails : rendering html and js in one request

ruby-on-rails - Rails 3.1 RC 中 "illegal hardware instruction rails server"错误的任何已知原因?

php - 如何修改Joomla默认搜索模块?

ruby - 有没有办法在 Ruby YAML 文件中指定 ruby​​ 类/模块常量作为值

javascript - Rails 4 的 EJS 不工作

ruby - 用其他哈希构造哈希

ruby-on-rails - 使用 Ruby 1.8 和 1.9 的 Phusion Passenger?

ruby - 使用 Nokogiri 验证 XML : finding the line-nr of validation errors?

java - 不能使用来自不同 Maven 模块的类