2012-10-03 189 views
1

我見過一個紅寶石塊,看起來像:在模塊中定義的Ruby模塊?

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 

如果模塊的流浪::配置塊I之外定義得到錯誤

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

而我不知道爲什麼在運行塊內聲明模塊有所作爲。

回答

0

其中,模塊可用於爲變量和常量提供新的名稱空間。我會說這是原因。

+0

你一般在談論模塊,而不是爲什麼有人會在塊中聲明模塊。 – tadman

+0

那麼,*爲什麼有人這樣做是未知的,所以我們都猜測他們的理由。我們只能建議可能性。爲清楚起見,請致電 –

1

它將有條件地定義模塊。請記住,塊不一定執行,它取決於目標方法來決定。

雖然您的特定示例是完全有效的Ruby,但組織這樣的事情可能會導致混淆。爲了清楚起見,在塊外部定義它會更好。

+0

+1。清晰度在降低維護成本方面起到了回報,應始終考慮這一點。 –

+0

因此,在這個特殊的例子中,我正在試圖添加一個清理塊到vagrant腳本,並且當模塊在塊之外時,我得到了一個未初始化的常量。我將編輯該問題以包含具體內容。 –

+0

在'Vagrant :: Config.run'開始執行之前,它可能是你正在嘗試引用的內容實際上並未加載。 – tadman