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