dr.*_*dr. 27 ruby rake rake-task
我见过一个例子,其中一个任务有参数和一个依赖任务,如:
task :name, [:first_name, :last_name] => [:pre_name] do |t, args|
args.with_defaults(:first_name => "John", :last_name => "Dough")
puts "First name is #{args.first_name}"
puts "Last name is #{args.last_name}"
end
Run Code Online (Sandbox Code Playgroud)
如果它是一个任务依赖项,你将如何将参数传递给name任务:
task :sendLetter => :name
#do something
end
Run Code Online (Sandbox Code Playgroud)
小智 30
Args通过调用堆栈向下传递.您只需要确保您的顶级任务捕获所有依赖项所需的所有参数.在你的情况,你会希望把first_name和last_name对send_letter任务.
下面是一个示例,显示在其他地方定义的命名参数流入依赖项(即使它们未在依赖项中定义),但与顶级任务参数名称不匹配的参数为nil.
desc 'Bar'
task :bar, :nom do |task, args|
puts "BAR NOM: #{args[:nom]}"
puts "BAR NAME: #{args[:name]}"
end
desc 'Foo'
task :foo, [:name] => :bar do |task, args|
puts "FOO NAME: #{args[:name]}"
end
Run Code Online (Sandbox Code Playgroud)
运行rake foo[baz]yeilds
BAR NOM:
BAR NAME: baz
FOO NAME: baz
Run Code Online (Sandbox Code Playgroud)
有趣的是,args.with_defaults(nom: 'Jaques')在foo任务中使用对依赖任务没有影响 - nom仍然是零.
耙版: rake, version 10.0.3
Ruby版本: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]
你可能会得到的最接近的是
task :sendLetter do
task(:name).invoke("first", "last")
end
Run Code Online (Sandbox Code Playgroud)
要么
task :sendLetter do
task(:name).execute(["first", "last"])
end
Run Code Online (Sandbox Code Playgroud)
你可以做点什么
task :sendLetter => task(:name).invoke("first", "last")
Run Code Online (Sandbox Code Playgroud)
但name无论你是否要求,都会调用sendLetter.
Task#invoke如果尚未调用任务,则仅调用该任务,并首先调用任何未调用的先决条件.Task#execute总是调用任务但不调用任何先决条件.请注意,这些参数不会影响一次调用的性质Task#invoke:如果您两次调用参数化任务,则只会运行一次,无论参数是否不同.
| 归档时间: |
|
| 查看次数: |
7873 次 |
| 最近记录: |