据我所知,Thor提供了将方法标记为无任务的方法,因为方法作为任务的概念与方法可见性的概念不同.他们需要区分,因为他们做不同的工作.
Thor
除非将其明确标记为无任务,否则将该类的子类的每个方法(独立于其可见性)视为任务.通过控制任务的可见性,您可以控制对该任务的访问,例如,如果您将任务设为私有,则子类无法直接调用,也不能由用户直接调用.访问控制不同于某项任务是否是任务.Thor不能直接调用非任务的方法,他们无法选择.
这是一个例子来说明.在下文中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)
Run Code Online (Sandbox Code Playgroud)