将回调放在同一行

时间:2013-08-20 21:21:45

标签: ruby chef

我不是任何方式的Ruby开发人员,我正在修改Chef配方。我很好奇是否可以将以下内容放入一行。

directory "/var/lib/mysql" do
  action :delete
end

我试过了:

directory "/var/lib/mysql", :action => "delete"

但是,这会引发此错误:

ArgumentError
-------------
wrong number of arguments (3 for 2)

我也看过这个,但这对我来说似乎很尴尬:

directory "/var/lib/mysql" do action => "delete" end

2 个答案:

答案 0 :(得分:1)

大括号相当于do...end,更常用于单行:

directory("/var/lib/mysql") { action :delete }

为避免歧义,需要添加括号,因为大括号也用于定义哈希值。

答案 1 :(得分:1)

你可以采用两种方式,正如所谓的block

directory("/var/lib/mysql") { action :delete }

你可以用这种方式代码,只是告诉你ruby中存在分号;)

directory "/var/lib/mysql" do ; action :delete ; end