2013-02-28 32 views

回答

5

正如我所瞭解的,Thor提供了將方法標記爲no tasks的方法,因爲作爲任務的方法的概念與方法的概念visibility不同。他們需要區別,因爲他們做不同的工作。

除非明確標記爲無任務,否則每個子類類別Thor的方法(與其可見性無關)都被視爲一項任務。通過控制任務的可見性,您可以控制對該任務的訪問,例如如果您將任務設爲私有,則不能由子類或直接由用戶調用。訪問控制與是否是任務不同。不是任務的方法不能由Thor直接調用,他們不能有options

下面是一個例子來說明。以下SuperClass繼承任務baseTask和方法this_is_not_a_taskBaseClass。請注意,如果任務baseTask被標記爲私人,它將不會被SuperClass繼承,但this_is_not_a_task仍將繼承。

require 'thor' 

class BaseClass < Thor 
    method_options :force => :boolean, :alias => :string 

    desc 'baseTask', 'Base task' 
    def baseTask 
    puts this_is_not_a_task("base") 
    end 

    no_tasks do 
    def this_is_not_a_task(s) 
     s.upcase 
    end 
    end 

    # private :baseTask 
end 

class SuperClass < BaseClass 
    desc 'superTask', 'Super task' 
    def superTask 
    puts this_is_not_a_task("super") 
    end 
end 

SuperClass.start(ARGV) 
+0

我真的很喜歡你的區別:「一種方法是一種任務,與方法的可見性概念不同」 – awendt 2013-03-04 08:14:18

相關問題