如何在ruby中获得对封闭模块的引用?
module Foo
@@variable=1
def variable
@@variable
end
class A
def somemethod
puts "variable=#{Foo.variable}" #<--this won't run, resolving Foo
# as the class instead of the module
end
end
class Foo
... # doesn't matter what's here
end
end
我遇到了由命名混淆引起的这个问题。虽然名称很容易修复,但我想知道在ruby中执行此操作的“正确”方法是什么。如果我尝试运行它,似乎ruby正在尝试将Foo.variable解析为Foo :: Foo.variable这当然是失败的。似乎语言中应该有一种简单的方法来引用外部模块方法。
答案 0 :(得分:3)
您可以通过将::
前缀添加到Foo
来获取外部模块引用:
::Foo.variable
在您的示例代码中:
module Foo
@@variable=1
def variable
@@variable
end
class A
def somemethod
puts "variable=#{::Foo.variable}"
end
end
class Foo
... # doesn't matter what's here
end
end