6
或者更具体地说:我不能仅仅使用私有方法吗?为什么Thor使用no_tasks方法?
或者更具体地说:我不能仅仅使用私有方法吗?为什么Thor使用no_tasks方法?
正如我所了解的,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)
我真的很喜欢你的区别:“一种方法是一种任务,与方法的可见性概念不同” – awendt 2013-03-04 08:14:18