ruby – 如何将参数从父任务传递给Rake中的子任务?

我正在写一个由参数组成的任务的Rake脚本.我想出了如何传递参数,以及如何使任务依赖于其他任务.
task :parent,[:parent_argument1,:parent_argument2,:parent_argument3] => [:child1,:child2] do
  # Perform Parent Task Functionalities
end

task :child1,[:child1_argument1,:child1_argument2] do |t,args|
  # Perform Child1 Task Functionalities
end

task :child2,[:child2_argument1,:child2_argument2] do |t,args|
  # Perform Child2 Task Functionalities
end

>我可以将参数从父任务传递给子任务吗?
>有没有办法让孩子的任务是私人的,所以不能独立调用

解决方法

我实际上可以想到在Rake任务之间传递参数的三种方式.

>使用Rake对参数的内置支持

# accepts argument :one and depends on the :second task.
task :first,[:one] => :second do |t,args|
  puts args.inspect  # => '{ :one => "one" }'
end

# argument :one was automagically passed from task :first.
task :second,:one do |t,args|
  puts args.inspect  # => '{ :one => "one" }'
end

$rake first[one]

>通过Rake::Task#invoke直接调用任务:

# accepts arguments :one,:two and passes them to the :second task.
task :first,:one,:two do |t,args|
  puts args.inspect  # => '{ :one => "1",:two => "2" }'
  task(:second).invoke(args[:one],args[:two])
end

# accepts arguments :third,:fourth which got passed via #invoke.
# notice that arguments are passed by position rather than name.
task :second,:third,:fourth do |t,args|
  puts args.inspect  # => '{ :third => "1",:fourth => "2" }'
end

$rake first[1,2]

>另一个解决方案是将猕猴补丁的主要应用对象Rake::Application
并使用它来存储任意值:

class Rake::Application
  attr_accessor :my_data
end

task :first => :second do
  puts Rake.application.my_data  # => "second"
end

task :second => :third do
  puts Rake.application.my_data  # => "third"
  Rake.application.my_data = "second"
end

task :third do
  Rake.application.my_data = "third"
end

$rake first

相关文章

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