我是红宝石的新手。我知道配方使用此语句来更新包:
package pkg do
options platform_options['package_overrides']
action :upgrade
end
我想知道'包'是一种方法吗?我认为它应该是一个方法,但我无法在Chef :: Resource或Chef :: Resource :: Package类中找到方法定义。这句话是如何执行的?
答案 0 :(得分: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