这个 Chef 食谱应该重构吗?
Should this Chef recipe be refactored?
我写了一个从数据包安装 Windows 桌面应用程序的方法:
workstation_apps = data_bag_item('winapps','desktop_apps')
for package in workstation_apps['apps'] do
chocolatey_package "#{package}" do
action :install
end
end
运行 foodcritic 我收到一个错误:
FC002: Avoid string interpolation where not required: ./recipes/default.rb:23
如您所见,我在#{package} 周围添加了双引号,以便它扩展变量并且不用作注释。
有更好的方法吗?
您可以将 "#{package}"
替换为 package.to_s
。
如果 package
是字符串对象,只需 package
:
workstation_apps = data_bag_item('winapps','desktop_apps')
for package in workstation_apps['apps'] do
chocolatey_package package do
action :install
end
end
缩进 action ...
行以明确该行属于一个块。
两件事:首先,不鼓励在 Ruby 中使用 for
循环,而推荐使用 each
循环。其次,chocolatey package provider 支持多包操作,所以你可以这样重写配方:
workstation_apps = data_bag_item('winapps','desktop_apps')
chocolatey_package workstation_apps['apps']
(请记住,:install
是默认操作,因此您无需将其写出)
我写了一个从数据包安装 Windows 桌面应用程序的方法:
workstation_apps = data_bag_item('winapps','desktop_apps')
for package in workstation_apps['apps'] do
chocolatey_package "#{package}" do
action :install
end
end
运行 foodcritic 我收到一个错误:
FC002: Avoid string interpolation where not required: ./recipes/default.rb:23
如您所见,我在#{package} 周围添加了双引号,以便它扩展变量并且不用作注释。
有更好的方法吗?
您可以将 "#{package}"
替换为 package.to_s
。
如果 package
是字符串对象,只需 package
:
workstation_apps = data_bag_item('winapps','desktop_apps')
for package in workstation_apps['apps'] do
chocolatey_package package do
action :install
end
end
缩进 action ...
行以明确该行属于一个块。
两件事:首先,不鼓励在 Ruby 中使用 for
循环,而推荐使用 each
循环。其次,chocolatey package provider 支持多包操作,所以你可以这样重写配方:
workstation_apps = data_bag_item('winapps','desktop_apps')
chocolatey_package workstation_apps['apps']
(请记住,:install
是默认操作,因此您无需将其写出)