模块自动将命名空间添加到被调用的方法
Module automatically adding namespace to a method being called
我正在尝试创建一个 gem,我的 gem 需要一个不同的 gem,我已将其添加到 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)
关键词是"constant lookup operator"。我假设 BAZ
没有包装到另一个 class 或模块中,因此您需要在最顶层查找它。因此你在前面加上 ::
。
现在你明白为什么请求 (BAZ::Request
) 需要在 BAZ
.
之内了
我正在尝试创建一个 gem,我的 gem 需要一个不同的 gem,我已将其添加到 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)
关键词是"constant lookup operator"。我假设 BAZ
没有包装到另一个 class 或模块中,因此您需要在最顶层查找它。因此你在前面加上 ::
。
现在你明白为什么请求 (BAZ::Request
) 需要在 BAZ
.