invoke
在一个循环中多次执行相同的 rake 任务是不可能的。但是,我希望能够调用rake first
和遍历一个数组,并second
在每次迭代时使用不同的参数调用。由于invoke
只在第一次执行,我尝试使用execute
,但Rake::Task#execute不使用 splat (*) 运算符,只接受一个参数。
desc "first task"
task :first do
other_arg = "bar"
[1,2,3,4].each_with_index do |n,i|
if i == 0
Rake::Task["foo:second"].invoke(n,other_arg)
else
# this doesn't work
Rake::Task["foo:second"].execute(n,other_arg)
end
end
end
task :second, [:first_arg, :second_arg] => :prerequisite_task do |t,args|
puts args[:first_arg]
puts args[:second_arg]
# ...
end
围绕它的一个技巧是将参数execute
放入一个数组并second
检查 args 的结构,但这看起来,嗯,hackish。还有另一种(更好的?)方法来完成我想做的事情吗?