2013-02-28 66 views

回答

5

正如我所了解的,Thor提供了将方法标记为no tasks的方法,因为作为任务的方法的概念与方法的概念visibility不同。他们需要区别,因为他们做不同的工作。

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

下面是一个例子来说明。以下SuperClass继承任务baseTask和方法this_is_not_a_taskBaseClass。请注意,如果任务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) 
+0

我真的很喜欢你的区别:“一种方法是一种任务,与方法的可见性概念不同” – awendt 2013-03-04 08:14:18

相关问题