为什么Thor采用no_tasks方法?

时间:2013-02-28 09:08:21

标签: ruby thor

或者,更具体一点:我不能只使用私有方法吗?

1 个答案:

答案 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)