块中定义的Ruby模块?

时间:2012-10-03 14:03:56

标签: ruby module block

我看过一个类似于:

的红宝石块
Vagrant::Config.run do |config|

   module MyModule      
   end

end

在块内声明模块的效果是什么?

编辑:

具体来说,当VM终止时,我有一个块可以进行一些清理,它看起来像是

Vagrant::Config.run do |config|

  # vagrant config stuff

   module Vagrant
     module Provisioners
      class ChefClient < Chef
        def cleanup
          # cleanup here
        end
      end
    end
  end
end

如果模块是在Vagrant :: Config块之外定义的,我会收到错误

'<module:Provisioners>': uninitialized constant Vagrant::Provisioners::Chef (NameError)

而且我不确定为什么声明运行块内的模块有所不同。

2 个答案:

答案 0 :(得分:1)

它将有条件地定义模块。请记住,块不一定要执行,而是由目标方法来决定。

虽然您的特定示例是完全有效的Ruby,但组织这样的事情可能会导致混淆。为了清楚起见,最好在块之外定义。

答案 1 :(得分:0)

除其他外,模块可用于为变量和常量提供新的命名空间。我会说这就是原因。