我有一个厨师资源,我只是在烹饪书中添加了带有cookstyle的linting。我在食谱中有这一行:
existing_value = key.to_s.split('.').inject(node.elasticsearch) { |result, attr| result[attr] } rescue nil if existing_value.nil?
这导致了linter错误。我尝试了几件事,但我不确定如何说同样的事并通过皮棉测试。
Style/RescueModifier: Avoid using rescue in its modifier form
如果我完全删除了救援声明,则会导致此异常:
Chef::Mixin::Template::TemplateError (undefined method `[]' for nil:NilClass) on line #52:
...
52: <%= print_value 'action.destructive_requires_name' -%>
...
答案 0 :(得分:1)
因此,如果您使用的是近期的Chef版本,我们实际上有一个方法。你可以这样做:
existing_value ||= node.read("elasticsearch.#{key}")
我们会照顾其余的。
答案 1 :(得分:0)
虽然#coderanger的解决方案更好,但是linter要求你使用长救援表格
begin
existing_value = key.to_s.split('.').inject(node.elasticsearch) { |result, attr| result[attr] }
rescue
nil
end if existing_value.nil?
或通常认为更好
if existing_value.nil?
begin
existing_value = key.to_s.split('.').inject(node.elasticsearch) { |result, attr| result[attr] }
rescue
nil
end
end
我还会将rescue
更改为更具体的rescue Chef::Mixin::Template::TemplateError
,抢救所有异常可能不是您想要的(即您不想隐藏真正的异常)