我只是想知道如何讓動態(X)數量的參數傳遞給rake任務。 比如我要實現這一點:傳遞給rake任務的X個參數
耙子任務:測試[ARG1,ARG2,ARG3,...]
所以這裏的參數的數目是不固定的,它可能是arg1..arg10
或arg1..arg20
或者更少/更多。
有什麼想法嗎?
P.S:我不想爲這項任務浪費太多內存,因此我正在尋找最佳解決方案。 謝謝。
我只是想知道如何讓動態(X)數量的參數傳遞給rake任務。 比如我要實現這一點:傳遞給rake任務的X個參數
耙子任務:測試[ARG1,ARG2,ARG3,...]
所以這裏的參數的數目是不固定的,它可能是arg1..arg10
或arg1..arg20
或者更少/更多。
有什麼想法嗎?
P.S:我不想爲這項任務浪費太多內存,因此我正在尋找最佳解決方案。 謝謝。
您可以預先定義的參數的最大數量,但你並不需要使用所有:
require 'rake'
myargs = 'p1'.upto('p20').map{ |x| x.to_sym }
task :test, myargs do |t, args|
puts "#{t}: #{args.inspect}"
end
Rake.application[:test].invoke(1,2,3,4,5,6,7,8)
結果:
test: {:p1=>1, :p2=>2, :p3=>3, :p4=>4, :p5=>5, :p6=>6, :p7=>7, :p8=>8}
如果您需要默認值,可以它們定義:
task :test, myargs do |t, args|
args.with_defaults(:p19 => 'default1')
puts "#{t}: #{args.inspect}"
end
結果:
test: {:p19=>"default1", :p1=>1, :p2=>2, :p3=>3, :p4=>4, :p5=>5, :p6=>6, :p7=>7, :p8=>8}
另一種方式來定義參數witth默認值:
myargs = Hash.new{|hash,key| hash[key] = "Default #{key}"}
20.times{|i| myargs[:"p#{i}"] }
task :test, myargs.keys do |t, args|
args.with_defaults(myargs)
puts "#{t}: #{args.inspect}"
end
我不知道,如果你還需要這一點,但這裏是我的解決方案:
task :test, [:arg] do |t,args|
arguments = Array.new
arguments << args.arg
args.extras.each{|a| arguments << a}
puts arguments
end
結果:
rake test[arg1,arg2,arg3,arg4,...]
arg1
arg2
arg3
arg4
...
感謝您的回覆,所以問題是我不想限制參數的數量;可能有超過20例如; 1 - 100XX參數,所以如果我有:'myargs ='p1'.upto('p10000')。map {| x | x.to_sym}'那麼這將保留大量的內存.. – tokhi
是的,但老實說:當你通過'rake mytask [1,2,... 100000]'調用任務時,你將如何使用10000參數? – knut
是的,但肯定我可能有超過20個參數,並且這個任務將被隨機調用。無論如何,我把你的答案投給了你。目前它是唯一正確的解決方案:) – tokhi