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

Ruby 如何声明依赖于参数化任务的Rake任务?,ruby,rake,rake-task,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}"

我看到过一些示例,其中任务具有参数和依赖项任务,如:

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

最接近你的可能是

task :sendLetter do
  task(:name).invoke("first", "last")
end

你可以这样做

task :sendLetter => task(:name).invoke("first", "last")
但无论您是否请求发送信件,这都将调用
name


Task#invoke
仅在未调用任务时调用该任务,并首先调用任何未调用的prereq<代码>任务#执行始终调用任务,但不调用任何预请求。请注意,参数不会影响
任务#invoke
的一次调用性质:如果调用参数化任务两次,则无论参数是否不同,它只运行一次。

参数通过调用堆栈向下传递。您只需要确保顶级任务捕获所有依赖项所需的所有参数。在您的情况下,您需要将
名字
姓氏
放在
发送信函
任务中

下面的示例显示了在别处定义的命名参数流入依赖项(即使它们未在依赖项中定义),但与顶级任务参数名称不匹配的参数为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
运行rakefoo[baz]

BAR NOM: 
BAR NAME: baz
FOO NAME: baz
有趣的是,在
foo
任务中使用
args.with_defaults(nom:'Jaques')
对依赖任务没有影响--
nom
仍然为零

Rake版本:
Rake,版本10.0.3


Ruby版本:
Ruby 1.9.3p125(2012-02-16修订版34643)[x86_64-darwin11.3.0]

谢谢你,帮助很大。但是上帝啊,我希望元语法变量会消失,好的创造性的例子会回来。什么是元语法变量,或者更确切地说,你指的是上面的哪一个?
BAR NOM: 
BAR NAME: baz
FOO NAME: baz