6

或者,更具体地说:我不能只使用私有方法吗?

4

1 回答 1

6

据我了解,Thor 它具有将方法标记为无任务的方法,因为方法是任务的概念与方法的可见性概念不同。他们需要有所区别,因为他们从事不同的工作。

该类的子类的每个方法(与其可见性无关)都Thor被视为一个任务,除非它被明确标记为无任务。通过控制任务的可见性,您可以控制对该任务的访问,例如,如果您将任务设为私有,则子类或用户不能直接调用它。访问控制与某事是否为任务不同。不是任务的方法不能被 Thor 直接调用,它们不能有选项

这里有一个例子来说明。下面SuperClass继承了来自的任务baseTask和方法。请注意,如果任务被标记为私有,它将不会被继承,但仍会被继承。this_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 回答