2014-08-31 107 views
1

我是一個紅寶石新手。我知道這個說法是用食譜來更新一個包:'包pkg做什麼...結束'意味着在廚師食譜的食譜?

package pkg do 
    options platform_options['package_overrides'] 
    action :upgrade 
end 

我想知道'包'是否是一種方法嗎?我認爲它應該是一種方法,但我無法在Chef :: Resource或Chef :: Resource :: Package類中找到方法定義。這個陳述是如何執行的?

回答

1

句法—這是一個方法調用,是的。你傳遞一個參數pkg和一個「塊」(簡單地說,一個匿名函數)。

在該方法中,可以調用您提供的do .. end塊。其簡單的語法使Ruby非常方便,成爲特定於領域的語言(DSL)的基礎,它允許將用戶的代碼傳遞到複雜的系統中並在深處執行。

但是我沒有找到它調用的方法,但我想這是設計,沒有這樣的方法:在這種情況下,Ruby調用此實例的method_missing。顯然,it's defined here。在執行你的代碼時,Ruby隱含地發出以下方法調用:

method_missing :package, pkg do 
    options platform_options['package_overrides'] 
    action :upgrade 
end 
+0

cool!非常感謝! – 2014-09-01 07:05:20