J'ai du mal à comprendre le concept d'"accesseur" en Ruby. Quelqu'un peut-il me l'expliquer ?
attr_accessor est juste une méthode. (Le lien devrait fournir plus d'informations sur son fonctionnement - regardez les paires de méthodes générées, et un tutoriel devrait vous montrer comment l'utiliser).
L'astuce est que class
n'est pas une définition en Ruby (c'est "juste une définition" dans des langages comme C++ et Java), mais c'est une expression qui s'évalue. C'est au cours de cette évaluation que la méthode attr_accessor
est invoquée, ce qui a pour effet de modifier la classe courante - souvenez-vous du récepteur implicite : self.attr_accessor
, où self
est l'objet classe "ouvert" à ce moment-là.
Le besoin de attr_accessor
et de ses amis, est, bien :
Ruby, comme Smalltalk, ne permet pas d'accéder aux variables d'instance en dehors des méthodes1 de cet objet. En d'autres termes, les variables d'instance ne sont pas accessibles sous la forme x.y
, comme c'est le cas en Java ou même en Python. En Ruby, y
est toujours considéré comme un message à envoyer (ou une "méthode à appeler"). Les méthodes attr_*
créent donc des enveloppes qui permettent d'accéder aux variables d'instance @variable
par des méthodes créées dynamiquement.
Le Boilerplate craint
J'espère que cela clarifie certains petits détails. Bon codage.
1 Ce n'est pas strictement vrai et il y a quelques "techniques" autour de cela, mais il n'y a pas de support syntaxique pour l'accès aux "variables d'instance publiques".