傳參數到 Rake 中

傳統作法是用 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 物件。

參與討論

3 則留言

  1. 这两种task我都写过,感觉还是用环境变量做参数比较方便。rake foo[1,2]的写法包含特殊字符不说,在zsh下面还需要转义,很麻烦

發佈留言

發表迴響