在ruby中获取对封闭模块的引用

时间:2011-10-24 02:01:08

标签: ruby

如何在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这当然是失败的。似乎语言中应该有一种简单的方法来引用外部模块方法。

1 个答案:

答案 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