2013-02-28 5 views

答えて

5

私はThorを理解しているので、メソッドであるvisibilityのコンセプトとは異なるため、メソッドをno tasksとマークする方法があります。彼らは異なる仕事をするために差別化する必要があります。

クラスThorに対するサブクラスの(可視性とは無関係に)すべてのメソッドは、タスクとして明示的にマークされない限り、タスクと見なされます。タスクの可視性を制御することによって、そのタスクへのアクセスを制御します。タスクを非公開にすると、サブクラスやユーザーが直接呼び出すことはできません。アクセス制御は、何かがタスクであるかどうかとは異なります。タスクではないメソッドは、Thorによって直接呼び出されることはできず、optionsを持つことはできません。

説明する例を示します。以下では、SuperClassbaseTaskタスクを継承し、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

関連する問題