Hoặc, để cụ thể hơn: Thay vào đó, tôi có thể sử dụng phương thức riêng tư không?Tại sao Thor sử dụng phương thức no_tasks?
Trả lời
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)
- 1. Tại sao Áp dụng Phương thức AsEnumerable() cho một mảng?
- 2. Phương thức Arduino map() - tại sao?
- 3. Tại sao phương thức tĩnh Tạo tồn tại?
- 4. Tại sao phương thức Throwable.fillInStackTrace() công khai? Tại sao một người nào đó sẽ sử dụng nó?
- 5. Tại sao sử dụng các phương thức HTTP PUT và DELETE thay vì POST?
- 6. Tại sao dấu chấm than được sử dụng trong các phương thức của Ruby?
- 7. Tại sao lớp Java Pattern sử dụng phương thức factory chứ không phải constructor?
- 8. Tại sao scala sử dụng phản xạ để gọi phương thức trên kiểu cấu trúc?
- 9. Tại sao sử dụng sự kiện tùy chỉnh thay vì gọi phương thức trực tiếp?
- 10. Tại sao sử dụng phương thức khởi tạo thay vì hàm tạo?
- 11. Tại sao lại sử dụng các phương thức trợ giúp tĩnh trong Java?
- 12. Tại sao không thể sử dụng phương thức thể hiện noecho của lớp IO?
- 13. Tại sao GNU Smalltalk sử dụng dấu ngoặc vuông cho các đối tượng phương thức?
- 14. Sử dụng var bên ngoài phương thức
- 15. Tại sao phương thức TaskFactory.StartNew không phải là chung?
- 16. Tại sao chúng ta gọi phương thức doesNotRecognizeSelector:?
- 17. Tại sao JavaMail Transport.send() là một phương thức tĩnh?
- 18. Tại sao jQuery không cung cấp phương thức .firstChild?
- 19. Khi nào/tại sao/làm thế nào để sử dụng các phương thức thể hiện giao thức UINavigationControllerDelegate?
- 20. Tại sao có phương thức equals riêng cho các bộ?
- 21. Các tham số Boolean trong phương thức. Tại sao không?
- 22. Android: Tại sao phương thức onClick không hoạt động?
- 23. Tại sao sử dụng phương pháp Monte-Carlo?
- 24. Tại sao sử dụng singleton thay vì phương pháp tĩnh?
- 25. Tại sao sử dụng GetOrdinal() Phương pháp của SqlDataReader
- 26. Tại sao AlertDialog.Builder không có phương thức setOnDismissListener hoặc setOnShowListener?
- 27. Tại sao ObservableCollection không có phương thức RemoveAll?
- 28. Tại sao XElement không có phương thức GetAttributeValue?
- 29. Tại sao phương thức chain() Underscore.js không phải là lười?
- 30. Tại sao ARC giữ lại các đối số phương thức?
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