【发布时间】:2017-04-10 22:51:21
【问题描述】:
我有一个厨师资源,我刚刚在食谱中添加了带有 cookstyle 的 linting。我在食谱中有这一行:
existing_value = key.to_s.split('.').inject(node.elasticsearch) { |result, attr| result[attr] } rescue nil if existing_value.nil?
它导致 linter 出错。我尝试了几件事,但我不确定如何说同样的话并通过 lint 测试。
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' -%>
...
【问题讨论】:
-
这是一个包罗万象的
rescue,在实践中真的很糟糕。您可以删除rescue nil部分并使其仍然正常工作吗?如果不是,它会引发什么异常? -
key的值是多少?请阅读“minimal reproducible example”和链接页面。错误告诉我们result为零。 -
key的值,在此示例中的第 52 行action.destructive_requires_name是nil,它在我发布的异常的输出中。 -
一个小问题,请不要使用
chefstyle,这是针对厨师本身的。您想使用cookstyle用于烹饪书。 -
这实际上是烹饪风格。我的错。
标签: ruby chef-infra rubocop