我看过一个类似于:
的红宝石块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)
而且我不确定为什么声明运行块内的模块有所不同。
答案 0 :(得分:1)
它将有条件地定义模块。请记住,块不一定要执行,而是由目标方法来决定。
虽然您的特定示例是完全有效的Ruby,但组织这样的事情可能会导致混淆。为了清楚起见,最好在块之外定义。
答案 1 :(得分:0)
除其他外,模块可用于为变量和常量提供新的命名空间。我会说这就是原因。