2013-02-28 30 views

Trả lời

5

Khi tôi hiểu Thor, nó có các cách đánh dấu các phương thức là no tasks vì khái niệm phương pháp là một nhiệm vụ khác với khái niệm phương thức visibility của phương thức. Họ cần phải được phân biệt bởi vì họ làm các công việc khác nhau.

Mọi phương pháp (độc lập với khả năng hiển thị) của một lớp con với lớp Thor được coi là tác vụ trừ khi được đánh dấu rõ ràng là không có nhiệm vụ. Bằng cách kiểm soát mức độ hiển thị của tác vụ bạn kiểm soát quyền truy cập vào tác vụ đó, ví dụ: nếu bạn thực hiện một nhiệm vụ riêng tư thì nó không thể được gọi bởi các lớp con hoặc trực tiếp bởi người dùng. Kiểm soát truy cập là khác nhau cho dù một cái gì đó là một nhiệm vụ hay không. Các phương thức không phải là nhiệm vụ không thể được gọi trực tiếp bởi Thor và chúng không thể có options.

Dưới đây là ví dụ minh họa. Trong SuperClass kế thừa nhiệm vụ baseTask và phương pháp this_is_not_a_task từ BaseClass. Lưu ý rằng nếu tác vụ baseTask được đánh dấu là riêng tư thì sẽ không được kế thừa bởi SuperClass nhưng this_is_not_a_task sẽ vẫn được kế thừa.

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

Tôi thực sự thích sự khác biệt của bạn về "phương pháp là nhiệm vụ khác với khái niệm về khả năng hiển thị của phương pháp" – awendt

Các vấn đề liên quan