4
A
回答
5
随着
task :commit => :c
你不不定义别名,你设置了一个先决条件。 当您致电:commit
时,先要求先请求:c
。 只要有一个prerequsite和:commit
不包含自己的代码,它可能看起来像一个别名,但它不是。
知道了,你可“别名”命名空间,如果你define a default task for your namespace,并设置该任务的先决条件(和先决条件可能会再次另一个命名空间的默认任务)。
但我认为,没有必要使用别名命名空间。这足够了,如果你为namepsaces定义了一个默认任务,并且可能是'alias'那个任务。
再次读取的问题后,我有另外一个设想,基于Is there a “method_missing” for rake tasks?:
require 'rake'
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
rule "" do |tsk|
aliastask = tsk.name.sub(/short:/, 'long_namespace:')
Rake.application[aliastask].invoke
end
Rake.application['short:a'].invoke
的规则定义task_missing -rule并试图更换命名空间(它取代的例子'short'和'long_namespace')。
缺点:未定义的任务不返回任何错误。所以,你需要一个改编版:
require 'rake'
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
rule "" do |tsk|
aliastask = tsk.name.sub(/short:/, 'long_namespace:')
if Rake.application.tasks.map{|tsk| tsk.name }.include?(aliastask)
Rake.application[aliastask].invoke
else
raise RuntimeError, "Don't know how to build task '#{tsk.name}'"
end
end
Rake.application['short:a'].invoke
Rake.application['short:undefined'].invoke
,并用新方法aliasnamespace
具备更好的通用定义别名命名空间:
require 'rake'
#Extend rake by aliases for namespaces
module Rake
ALIASNAMESPACES = {}
end
def aliasnamespace(alias_ns, original_ns)
Rake::ALIASNAMESPACES[alias_ns] = original_ns
end
rule "" do |tsk|
undefined = true
Rake::ALIASNAMESPACES.each{|aliasname, origin|
aliastask = tsk.name.sub(/#{aliasname}:/, "#{origin}:")
if Rake.application.tasks.map{|tsk| tsk.name }.include?(aliastask)
Rake.application[aliastask].invoke
undefined = false
end
}
raise RuntimeError, "Don't know how to build task '#{tsk.name}'" if undefined
end
#And now the usage:
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
aliasnamespace :short, 'long_namespace'
Rake.application['short:a'].invoke
#~ Rake.application['short:undefined'].invoke
相关问题
- 1. ExtJs命名空间别名
- 2. Ruby Rake任务中的命名空间
- 3. Rake命名空间无法识别本地任务
- 4. Microsoft.SharePoint.Client命名空间 - Sharepoint命名空间不被识别
- 5. 命名空间别名范围问题
- 6. 导入命名空间的别名
- 7. 别名和命名空间冲突
- 8. XmlDictionaryReader更改xml命名空间别名
- 9. PHP命名空间别名冲突?
- 10. F#中的命名空间别名?
- 11. C++中的命名空间别名
- 12. Oxygene中的命名空间别名
- 13. 别名冲突命名空间c#
- 14. 自动命名空间别名4
- 15. 命名空间别名不ReSharper的
- 16. 重命名命名空间
- 17. android命名空间之间的区别
- 18. 超过命名空间中一个枚举:类型或命名空间“性别”没有命名空间
- 19. 命名空间点命名空间和嵌套命名空间有什么区别?
- 20. 命名空间
- 21. 命名空间
- 22. 命名空间
- 23. 命名空间
- 24. 命名空间
- 25. 命名空间中不存在命名空间名称'Notify'Twilio.Rest
- 26. C++命名空间....匿名命名空间是合法的?
- 27. 匿名命名空间
- 28. 从匿名命名空间调用命名命名空间中的函数
- 29. 命名空间级别的访问
- 30. 无法识别的命名空间'umbraco'
你一定要接受克努特的答案。 – Jerska