【问题标题】:Why does Thor feature the no_tasks method?为什么 Thor 采用 no_tasks 方法?
【发布时间】:2013-02-28 09:08:20
【问题描述】:

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

【问题讨论】:

    标签: ruby thor


    【解决方案1】:

    据我了解,Thor 它具有将方法标记为no tasks 的方法,因为方法作为任务的概念与方法visibility 的概念不同。他们需要与众不同,因为他们从事不同的工作。

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

    这里有一个例子来说明。下面的SuperClass 继承了baseTask 的任务this_is_not_a_taskBaseClass 的方法this_is_not_a_task。请注意,如果任务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)
    

    【讨论】:

    • 我真的很喜欢您对“作为任务的方法与方法的可见性概念不同”的区别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多