2013-02-28 18 views

risposta

5

Come ho capito, Thor presenta i metodi per contrassegnare i metodi come no tasks perché il concetto di un metodo è un'attività diversa dal concetto di metodo visibility. Devono essere differenziati perché fanno diversi lavori.

Ogni metodo (indipendentemente dalla sua visibilità) di una sottoclasse alla classe Thor viene considerato un'attività a meno che non venga contrassegnato esplicitamente come nessuna attività. Controllando la visibilità di un'attività si controlla l'accesso a tale attività, ad es. se rendi un compito privato, non può essere chiamato da sottoclassi o direttamente da un utente. Il controllo dell'accesso è diverso dal fatto che qualcosa sia o meno un'attività. I metodi che non sono attività non possono essere chiamati direttamente da Thor e non possono avere options.

Ecco un esempio da illustrare. Nel seguente numero SuperClass eredita l'attività baseTask e il metodo this_is_not_a_task da BaseClass. Notare che se l'attività baseTask è contrassegnata come privata, non verrà ereditata da SuperClass ma l'this_is_not_a_task verrà comunque ereditata.

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

Mi piace molto la distinzione che "un metodo è un'attività diversa dal concetto di visibilità di un metodo" – awendt

Problemi correlati