什么'包装pkg做...结束'意味着在厨师食谱的食谱?

时间:2014-08-31 14:44:03

标签: ruby chef-recipe

我是红宝石的新手。我知道配方使用此语句来更新包:

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

我想知道'包'是一种方法吗?我认为它应该是一个方法,但我无法在Chef :: Resource或Chef :: Resource :: Package类中找到方法定义。这句话是如何执行的?

1 个答案:

答案 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