假设我有一个 rake 任务
task :aa, [:pp1, :pp2, :pp3] do |t, args|
args.with_defaults(:pp2 => "fff")
puts args.pp1
puts args.pp2
puts args.pp3
end
我如何通过仅获取第一个和第三个参数,从默认值中获取第二个参数?“rake aa[1,2,3]”调用中方括号中的对象是什么类型的对象?
aa2
您可以使用所需的参数(和序列)定义一个附加任务(在我的示例中)。如果它们具有相同的名称,则参数将转发到先决条件。
require 'rake'
task :aa, [:pp1, :pp2, :pp3] do |t, args|
args.with_defaults(:pp2 => "fff")
puts args.pp1
puts args.pp2
puts args.pp3
end
task :aa2, [:pp1, :pp3] => :aa
调用它:
rake aa2[1,3]
所以我最终使用旧的 rake 语法来传递参数
rake aa pp1=1 pp3=vvv
因此,pp1 和 pp3 可用于 ENV。然后我替换 args 中的默认值,如果我找到一个同名的参数,它是通过 CLI 传递的。
args.to_hash.each_key { |k| args.to_hash[k] = ENV[k.to_s] if ENV.has_key?(k.to_s) }
之后,我可以获得任何具有良好 args.param 语法的参数。