2013-02-28 3 views

उत्तर

5

जैसा कि मैंने थोर समझते हैं कि यह तरीके no tasks तरीके के रूप में चिह्नित करने के लिए क्योंकि एक विधि एक कार्य किया जा रहा है की अवधारणा के लिए एक विधि के visibility की अवधारणा से अलग है की सुविधा है। उन्हें अलग-अलग होने की आवश्यकता है क्योंकि वे अलग-अलग नौकरियां करते हैं।

कक्षा Thor के उप-वर्ग के प्रत्येक विधि (स्वतंत्र रूप से इसकी दृश्यता) को तब तक एक कार्य माना जाता है जब तक इसे स्पष्ट रूप से कोई कार्य नहीं माना जाता है। किसी कार्य की दृश्यता को नियंत्रित करके आप उस कार्य तक पहुंच नियंत्रित करते हैं, उदा। यदि आप एक कार्य निजी करते हैं तो इसे उप-वर्गों द्वारा या सीधे उपयोगकर्ता द्वारा नहीं कहा जा सकता है। एक्सेस कंट्रोल अलग है कि कुछ काम है या नहीं। जिन तरीकों को कार्य नहीं हैं उन्हें सीधे थोर द्वारा नहीं कहा जा सकता है और उनके पास options नहीं हो सकता है।

उदाहरण देने के लिए यहां एक उदाहरण दिया गया है। निम्नलिखित SuperClass में baseTask और से विधि 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) 
+0

मुझे वास्तव में "एक विधि होने की विधि एक विधि की दृश्यता की अवधारणा से अलग है" के अपने भेद को पसंद है। – awendt

संबंधित मुद्दे