需要重构新的Ruby 1.9哈希语法

时间:2017-05-16 15:17:30

标签: ruby chef-recipe rubocop

我的食谱中包含以下代码,这些代码未通过lint测试:

service 'apache' do
  supports :status => true, :restart => true, :reload => true
end

失败并显示错误:

Use the new Ruby 1.9 hash syntax.
  supports :status => true, :restart => true, :reload => true

不确定新语法是什么样的......有人可以帮忙吗?

2 个答案:

答案 0 :(得分:7)

在Ruby 1.9版本中引入了一种新的哈希文字语法,其键是符号。哈希使用"哈希火箭"运算符分隔键和值:

a_hash = { :a_key => 'a_value' }

在Ruby 1.9中,这种语法是有效的,但只要键是一个符号,它也可以写成:

a_hash = { a_key: 'a_value' }

正如Ruby样式指南所说,当您的哈希键是符号(see)时,您应该更喜欢使用Ruby 1.9哈希文字语法:

# bad
hash = { :one => 1, :two => 2, :three => 3 }

# good
hash = { one: 1, two: 2, three: 3 }

另外一个提示:不要将Ruby 1.9哈希语法与哈希火箭混合在同一个哈希文字中。当您获得的符号不符合哈希火箭的语法时(see)

# bad
{ a: 1, 'b' => 2 }

# good
{ :a => 1, 'b' => 2 }

所以你可以试试:

service 'apache' do
  supports status: true, restart: true, reload: true
end

如果你想看看Rubocop"方式"您可以在命令行中运行它,这将仅针对HashSyntax警告或标志自动更正您的代码:

rubocop --only HashSyntax --auto-correct

答案 1 :(得分:0)

service 'apache' do
  supports status: true, restart: true, reload: true
end

当您将符号作为键时,可以使用此新语法。