2015-06-22 104 views
0

我只是想了解我們如何定義食譜的屬性文件中的屬性結構。廚師屬性結構

下面是兩個例子:

// style-A 
default['my_cookbook']['name'] = 'something' 
default['my_cookbook']['version'] = '0.1.0' 

// style-B 
node.default.my_cookbook = { 
    :name => 'something', 
    :version => '0.1.0' 
} 

我問這個問題的原因是,在廚師的以前的版本我有點記得風格-A強烈建議所有的社區食譜遵循這種風格。我還記得當我嘗試覆蓋角色或環境中的屬性時,會看到與樣式-B有關的一些問題。如果嘗試覆蓋整個散列結構中的單個屬性,我會想出一個奇怪的行爲來取代整個散列結構。

我現在沒有看到這個錯誤,我在最新的11版本的廚師,但只是想知道這是我應該擔心的事情。我試圖用一種風格與我的所有烹飪書一致,並且我需要關於如何構造它的一些建議。在這一點上重要嗎?

+0

廚師使用Mash而不是哈希。不知道它是否會自動轉換爲你。我會建議= Mash.new({你哈希})。但我不能發誓。 –

+0

它的確,A和B之間的主要缺點是覆蓋中的方法訪問,由於該方法返回值而沒有設置它,所以不會覆蓋。 'default ['test'] = {:name =>'test1'}'是非常有效並且可行的。只留在符號或字符串屬性訪問上以避免覆蓋方法失敗。 – Tensibai

回答

1

當使用default['key']['subkey']風格,defaultMash和醪的[]=方法將其轉換Hash或散列的陣列到醪。

node.default.property =樣式將分配Hash而不調用[]=方法。

Mash從哈希繼承提供額外的功能,以及覆蓋初始值的默認值爲{},這使得任何未定義的值爲哈希,然後由於搗碎的行爲轉換爲哈希。