为什么Thor采用no_tasks方法?

awe*_*ndt 6 ruby thor

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

N.N*_*.N. 5

据我所知,Thor提供了将方法标记为无任务的方法,因为方法作为任务的概念与方法可见性的概念不同.他们需要区分,因为他们做不同的工作.

Thor除非将其明确标记为无任务,否则将该类的子类的每个方法(独立于其可见性)视为任务.通过控制任务的可见性,您可以控制对该任务的访问,例如,如果您将任务设为私有,则子类无法直接调用,也不能由用户直接调用.访问控制不同于某项任务是否是任务.Thor不能直接调用非任务的方法,他们无法选择.

这是一个例子来说明.在下文中SuperClass继承了任务baseTask和方法this_is_not_a_taskBaseClass.请注意,如果任务baseTask标记为私有,则不会继承该任务,SuperClassthis_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)