我正在尝试创建一个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
解决方法
从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,789]" name = COURSE NAME numbers = 123,789
对于rake< 10.1.0你可以创建一个足够大的参数列表.这个hack最多可以使用26个数字:
task :course,*:a..:z] => :environment do |t,args| name = args[:name] numbers = args.values_at(*:a..:z).compact puts "name = #{name}" puts "numbers = #{numbers.join ','}" end