0

假设我有一个 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]”调用中方括号中的对象是什么类型的对象?

4

2 回答 2

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]
于 2012-07-24T18:36:52.987 回答
0

所以我最终使用旧的 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 语法的参数。

于 2012-07-24T22:02:30.167 回答