耙任务w / splat参数

时间:2013-09-06 14:33:56

标签: ruby-on-rails ruby rake ruby-on-rails-4 rake-task

我试图创建一个rake任务,它接受一个必需的第一个参数,然后是任意数量的其他参数,我想把它们组合成一个数组:

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

我已尝试过以下操作,但args[:numbers]只是一个字符串w / 123,而不是所有数字。

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

1 个答案:

答案 0 :(得分:16)

从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你可以创建一个足够大的参数列表。这个hack最多可以使用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