1

我见过一个看起来像这样的红宝石块:

Vagrant::Config.run do |config|

   module MyModule      
   end

end

在块内声明这样的模块有什么影响?

编辑:

具体来说,当虚拟机终止时,我有一个块要做一些清理工作,看起来像

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)

而且我不确定为什么在 run 块中声明模块会有所不同。

4

2 回答 2

1

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

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

于 2012-10-03T17:24:12.120 回答
0

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

于 2012-10-03T14:14:39.357 回答