如何声明依赖于参数化任务的Rake任务?

| 我看过一个示例,其中一个任务具有参数和一个依赖项任务,例如:
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
如果它是任务依赖项,那么如何将参数传递给名称任务:
task :sendLetter => :name
  #do something
end
    
已邀请:
Args通过调用堆栈向下传递。您只需要确保顶层任务捕获了所有依赖项所需的所有参数即可。对于您的情况,您需要在
send_letter
任务上放置
first_name
last_name
。 这是一个示例,显示了在别处定义的命名参数流入依赖关系(即使它们未在依赖关系中定义),但是与顶级任务参数名称不匹配的参数为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
运行
rake foo[baz]
收益
BAR NOM: 
BAR NAME: baz
FOO NAME: baz
有趣的是,在
foo
任务中使用
args.with_defaults(nom: \'Jaques\')
对从属任务没有影响-
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
要么
task :sendLetter do
  task(:name).execute([\"first\", \"last\"])
end
你可以做类似的事情
task :sendLetter => task(:name).invoke(\"first\", \"last\")
但是无论您是否要求
sendLetter
,都将调用
name
Task#invoke
仅在尚未调用任务时调用它,并首先调用任何未调用的先决条件。
Task#execute
始终调用任务,但不调用任何先决条件。请注意,这些参数不会影响ѭ18the的一次调用性质:如果两次调用已参数化的任务,则无论参数是否不同,它只会运行一次。     

要回复问题请先登录注册