或者,更具体一点:我不能只使用私有方法吗?
答案 0 :(得分:5)
据我了解Thor,它提供了将方法标记为no tasks的方法,因为方法作为任务的概念与方法visibility的概念不同。他们需要区分,因为他们做不同的工作。
类Thor
的子类的每个方法(独立于其可见性)都被视为任务,除非它被明确标记为无任务。通过控制任务的可见性,您可以控制对该任务的访问权限,例如如果您将任务设为私有,则子类或直接由用户调用它。访问控制不同于某项任务是否是任务。不是任务的方法不能由Thor直接调用,他们不能拥有options。
这是一个例子来说明。在以下SuperClass
中,继承了baseTask
中的任务this_is_not_a_task
和方法BaseClass
。请注意,如果任务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)