Pourquoi Ruby ont à la fois privé et protégé méthodes?

Avant que j'ai lu cet article, je pensais que le contrôle d'accès dans Ruby a travaillé comme ceci:

  • public - peut être consulté par n'importe quel objet (par exemple,Obj.new.public_method)
  • protected - ne peut être consulté à partir de l'objet lui-même, ainsi que toutes les sous-classes
  • private - même protégé, mais la méthode n'existe pas dans les sous-classes

Cependant, il semble que protected et private agir de la même, sauf pour le fait que vous ne pouvez pas appeler private méthodes explicitement avec un récepteur (c'est à dire self.protected_method fonctionne, mais self.private_method ne marche pas).

Quel est le point de tout cela? Quand il y a un scénario si vous ne voulez pas que votre méthode appelée explicitement avec un récepteur?

  • Si toutes les instances de Object ont été autorisés à appeler les méthodes privées de toute autre instance de Object, il serait possible de dire des choses comme 5.puts("hello world").