4

我正在使用 ruby​​ 执行 rake 任务:

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

前两个 puts 不返回任何东西aaaaaaaaaaa并被ssssssss打印,但是 bbbbbb print 确实返回了我的参数,即使当我通过每个参数时它们也会被打印出来。我究竟做错了什么?

更新

我开始了这样的 rake 任务:

rake generate:txt[Temp.txt,22]

bbbbbbbbb 打印:

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

每个循环打印:

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

2 回答 2

6

args不是Hash, 是Rake::TaskArguments:

puts args.class #=> Rake::TaskArguments

可能这个类没有实现sizeand 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 回答