【问题标题】:Rake task w/ splat arguments带有 splat 参数的 Rake 任务
【发布时间】:2013-09-10 16:50:46
【问题描述】:

我正在尝试创建一个 rake 任务,它需要一个必需的第一个参数,然后是我想将任意数量的附加参数集中到一个数组中:

rake course["COURSE NAME", 123, 456, 789]

我尝试了以下方法,但 args[:numbers] 只是一个带有 123 的字符串,而不是所有数字。

task :course, [:name, *:numbers] => :environment do |t, args|
  puts args # {:name=>"COURSE NAME", :numbers=>"123"}
end

【问题讨论】:

  • rake course["COURSE NAME", [123, 456, 789]] 怎么样?
  • 这给了我{:name=>"COURSE NAME", :numbers=>"[123"} 这真的很奇怪。
  • 任务的参数之间不允许有空格,试试这个:rake course["COURSE NAME",123,456,789]
  • 不。给我{:name=>"COURSE NAME", :numbers=>"123"}

标签: ruby-on-rails ruby rake ruby-on-rails-4 rake-task


【解决方案1】:

从 rake 10.1.0 开始,您可以使用 Rake::TaskArguments#extras:

task :environment

task :course, [:name] => :environment do |t, args|
  name = args[:name]
  numbers = args.extras
  puts "name = #{name}"
  puts "numbers = #{numbers.join ','}"
end

输出:

$ rake "course[COURSE NAME, 123, 456, 789]"
name = COURSE NAME
numbers = 123,456,789

对于 rake

以下是最多 26 个数字的解决方法:

task :course, [:name, *:a..:z] => :environment do |t, args|
  name = args[:name]
  numbers = args.values_at(*:a..:z).compact
  puts "name = #{name}"
  puts "numbers = #{numbers.join ','}"
end

【讨论】:

  • 这不起作用。我试过rake course["COURSE NAME",123,456,789]rake course["COURSE NAME",[123,456,789]],在这两种情况下args.extras 都是nil
  • 好像this feature 是在 rake 10.1.0 中引入的,也许你必须更新
  • 这在使用 10.1.0 时有效,我们的服务器当前正在运行 10.0.3。有没有不使用extras方法的解决方案?
  • @KyleDecot 在我的回答中添加了 rake
猜你喜欢
  • 2017-08-02
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2012-12-17
相关资源
最近更新 更多