在rake任务调用中省略params

时间:2012-07-24 14:07:36

标签: ruby 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,从默认值中取出第二个参数?在“rake aa [1,2,3]”调用的方括号中是什么类型的对象?

2 个答案:

答案 0 :(得分:0)

您可以使用所需的参数(和序列)定义其他任务(在我的示例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]

答案 1 :(得分:0)

所以我最终使用旧的rake语法来传递params

rake aa pp1=1 pp3=vvv

因此,ENV可以使用pp1和pp3。然后我替换args中的默认值,如果我找到一个具有相同名称的param,它将通过CLI传递。

args.to_hash.each_key { |k| args.to_hash[k] = ENV[k.to_s] if ENV.has_key?(k.to_s) }

之后,我可以使用很好的args.param语法获得任何参数。