4

私はルビーでレーキタスクに取り組んでいます:

namespace :generate do
  desc "Export to txt"
  task :txt, [:filename, :item_id] => :environment do |t, args|
    puts "aaaaaaaaaaaaa #{args.length}"
    puts "ssssssss #{args.size}"
    puts "bbbbbbbbbb #{args}"

    args.each do | arg |
        puts "#{arg}"
    end
  end
end

最初の 2 つのプットは何も返さずaaaaaaaaaaassssssss出力されますが、bbbbbb print は引数を返し、各引数を通過しても出力されます。私は何を間違っていますか?

アップデート

私はこのようにレーキタスクを開始しました:

rake generate:txt[Temp.txt,22]

bbbbbbbbbb プリント:

bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}

各ループは以下を出力します:

[:filename, "Temp.txt"]
[:item_id, "22"]
4

2 に答える 2

6

argsではなくHashRake::TaskArguments:

puts args.class #=> Rake::TaskArguments

sizeおそらく、このクラスはand を実装していませんlength。ハッシュへの変換は私にとってはうまくいきます:

namespace :generate do
  desc "Export to txt"
  task :txt, [:filename, :item_id] => :environment do |t, args|
    puts "args class: #{args.class}"
    args = args.to_hash
    puts "args to hash: #{args.inspect}"
    puts "aaaaaaaaaaaaa #{args.length}"
    puts "ssssssss #{args.size}"
    puts "bbbbbbbbbb #{args}"

    args.each do | arg |
        puts "#{arg}"
    end
  end
end

プリント:

$ rake generate:txt[Temp.txt,22]
Rake::TaskArguments
{:filename=>"Temp.txt", :item_id=>"22"}
aaaaaaaaaaaaa 2
ssssssss 2
bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}
[:filename, "Temp.txt"]
[:item_id, "22"]
于 2013-01-22T13:31:56.010 に答える
1

Rake:TaskArguments のインスタンスを扱っている場合は、http://rake.rubyforge.org/classes/Rake/TaskArguments.html を参照してください

列挙可能なものとして扱いたい場合は、to_hash を呼び出します。

namespace :generate do
  desc "Export to txt"
  task :txt, [:filename, :item_id] => :environment do |t, args|
     puts args.class
     puts "aaaaaaaaaaaaa #{args.to_hash.length}"
     puts "size #{args.to_hash.size}"
     puts "bbbbbbbbbb #{args}"
     args.each do | arg |
    puts "#{arg}"
     end
  end
end
于 2013-01-22T13:36:14.107 に答える