6

または、より具体的に言うと、代わりにプライベートメソッドを使用することはできませんか?

4

1 に答える 1

6

私が理解しているように、トールは、メソッドがタスクであるという概念がメソッドの可視性の概念とは異なるため、メソッドをタスクなしとしてマークする方法を備えています。彼らは異なる仕事をしているので、区別する必要があります。

クラスのサブクラスのすべてのメソッド (可視性とは無関係) は、Thorタスクなしとして明示的にマークされていない限り、タスクと見なされます。タスクの可視性を制御することで、そのタスクへのアクセスを制御します。たとえば、タスクをプライベートにすると、サブクラスから、またはユーザーから直接呼び出すことができなくなります。アクセス制御は、何かがタスクであるかどうかとは異なります。タスクではないメソッドは、Thor から直接呼び出すことはできず、オプションを持つこともできません。

以下に例を示します。以下では、からタスクとメソッドをSuperClass継承します。タスクがプライベートとしてマークされている場合、タスクは継承されませんが、継承されることに注意してください。baseTaskthis_is_not_a_taskBaseClassbaseTaskSuperClassthis_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)
于 2013-03-01T06:44:02.860 に答える