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