ruby – 如何将数组作为参数传递给Rake任务?

我正在写一个Rake任务,我想传递一个数组作为参数之一.这是我现在的方式.
task :change_statuses,:ids,:current_status,:new_status do |task,args|
  puts "args were #{args.inspect}"
end

我已经尝试以这些方式运行任务:

# First argument as array
rake "change_statuses[[1,2,3],active,inactive]"

# First argument as string
rake "utility:change_account_statuses['1,3',foo,bar]"

我的预期产出是:

args were {:ids=> [1,:current_status=> 2,:new_status=> 3}

但是,我的实际输出在每种情况下是:

args were {:ids=>"[1",:current_status=>"2",:new_status=>"3]"}

如何将数组传递给Rake任务?

解决方法

灵魂之一是避免在字符串中的符号,所以您的命令行将如下所示:
$rake change_statuses['1 2 3',bar]

然后你可以简单地拆分ID:

# Rakefile

task :change_statuses,args|
  ids = args[:ids].split ' '

  puts "args were #{args.inspect}"
  puts "ids were #{ids.inspect}"
end

或者您可以解析ids值以获得预期的输出

args[:ids] = args[:ids].split(' ').map{ |s| s.to_i }

我使用耙子0.8.7

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...