傳統作法是用 rake blah foo=1 這樣的指令,於是就可以透過環境變數拿到:
task :blah do
puts ENV['foo']
end
但是,最近看到新的 API 使用中括號的用法 (也不新了,從 0.8.2 開始支援),覺得挺有趣的:
desc "passing 1 parameter to rake task"
task :blah1, [:a] do |t,args|
puts args.inspect
end
執行 rake blah1[9] 會輸出 {:a=>"9"},注意到傳進來的變數值是字串。
desc "passing 2 parameters to rake task"
task :blah2, [:a, :b] do |t,args|
puts args.inspect
end
執行 rake blah2[foo,bar] 會輸出 {:a=>"foo", :b=>"bar"}
如果要有預設值,可以這樣做:
desc "passing parameters with default values to rake task"
task :blah3, [:a, :b] do |t,args|
args.with_defaults(:a => 'foobar', :b => 1)
puts args.inspect
end
此時執行 rake blah3 則是輸出 {:a=>"foobar", :b=>1}
對了,好奇 t 是什麼? 那是 Rake::Task 物件。
这两种task我都写过,感觉还是用环境变量做参数比较方便。rake foo[1,2]的写法包含特殊字符不说,在zsh下面还需要转义,很麻烦
rake blah1\[9\]