tôi sẽ cung cấp Theo tôi, và có lẽ tôi sẽ nhận được một đá cho nó, nhưng tôi không bận tâm với bảo vệ hoặc tư nhân trong Ruby. Thực tế là, Ruby đối xử với bạn như một người lớn, nếu bạn muốn chạy một phương pháp riêng tư từ bên ngoài lớp học, bạn có thể (có areways). Bạn có thể chạy các phương thức được bảo vệ bên ngoài lớp. Bạn thậm chí có thể gán lại các hằng số ... bạn có thể làm bất cứ điều gì bạn thích, về cơ bản.
Và đó là lý do tôi thích nó, đó là trách nhiệm của bạn. Cảm giác của tôi là, để đánh dấu một cái gì đó như protected hay private bạn đang làm hai điều:
- Indicating rằng bạn không nghĩ một người tiêu dùng sẽ cần đến nó.
- Thứ hai đoán những gì người khác cần.
và ngoài ra, bạn đang làm cho nó khó khăn hơn để kiểm tra, vì nó có thể là một nỗi đau thực sự thử nghiệm các phương pháp riêng (xem What's the best way to unit test protected & private methods in Ruby? cách xung quanh nó)
Đối với những người hai lý do cuối cùng, tôi don' t bận tâm với họ. Nếu bạn thực sự muốn một số loại rào cản giữa các lớp/phương pháp của bạn và người tiêu dùng (có thể là mã hoặc nhà phát triển) thì có những cách khác hiệu quả hơn (proxy, obfuscation, mã hóa, phương pháp bảo vệ bằng mật khẩu, v.v.). Nếu không, tại sao không cấp cho họ quyền truy cập vào cùng một công cụ bạn đã sử dụng?
Điều này nghe có vẻ hơi khó hiểu đối với tôi ... điểm ** thứ 3 của bạn **. Một lớp con có thể truy cập các phương thức 'private' của siêu lớp bên trong nó. Phương thức 'protected' cho bạn khả năng truyền vào một đối tượng của cùng một lớp và thực hiện các phương thức được bảo vệ trên đối tượng đó. – slindsey3000
http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby "phương pháp được bảo vệ có thể thực sự được gọi bất cứ lúc nào người nhận cùng lớp với 'tự' ' – clyfe