12

我正在尝试创建一个 rake 任务,该任务需要一个必需的第一个参数,然后是我想将任意数量的附加参数集中到一个数组中:

rake course["COURSE NAME", 123, 456, 789]

我已经尝试了以下方法,但args[:numbers]它只是一个带有/123而不是所有数字的字符串。

task :course, [:name, *:numbers] => :environment do |t, args|
  puts args # {:name=>"COURSE NAME", :numbers=>"123"}
end
4

1 回答 1

22

从 rake 10.1.0 开始,您可以使用Rake::TaskArguments#extras

task :environment

task :course, [:name] => :environment do |t, args|
  name = args[:name]
  numbers = args.extras
  puts "name = #{name}"
  puts "numbers = #{numbers.join ','}"
end

输出:

$ rake "course[COURSE NAME, 123, 456, 789]"
name = COURSE NAME
numbers = 123,456,789

对于 rake < 10.1.0,您可以创建足够大的参数列表。

这是最多 26 个数字的解决方法:

task :course, [:name, *:a..:z] => :environment do |t, args|
  name = args[:name]
  numbers = args.values_at(*:a..:z).compact
  puts "name = #{name}"
  puts "numbers = #{numbers.join ','}"
end
于 2013-09-06T14:47:08.727 回答