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