Je comprends que l'on utilise le mot clé « bénir » en Perl à l’intérieur de la « nouvelle » méthode d’une classe :
Mais ce qui exactement est « bénir » faisant à cette référence de hachage ?
Je comprends que l'on utilise le mot clé « bénir » en Perl à l’intérieur de la « nouvelle » méthode d’une classe :
Mais ce qui exactement est « bénir » faisant à cette référence de hachage ?
En général, bless
associe un objet à une classe.
package MyClass;
my $object = { };
bless $object, "MyClass";
Maintenant, lorsque vous appelez une méthode sur $object
, Perl savoir quel paquet à la recherche de la méthode.
Si le deuxième argument est omis, comme dans votre exemple, le package en cours/classe est utilisée.
Par souci de clarté, votre exemple est peut-être écrit comme suit:
sub new {
my $class = shift;
my $self = { };
bless $self, $class;
}
EDIT: Voir kixx's bonne réponse pour un peu plus de détails.
bless
associe une référence à un package.
Il n'a pas d'importance ce que la référence, il peut être à une table de hachage (cas le plus courant), dans un tableau (pas si courant), un scalaire (en général, cela indique un inside-out de l'objet), à une expression régulière, sous-routine ou TYPEGLOB (voir le livre Orientée Objet en Perl: Un Guide Complet des Concepts et des Techniques de Programmation par Damian Conway pour des exemples utiles) ou même une référence à un fichier ou répertoire de la poignée (moins le cas le plus courant).
L'effet bless
-ing a, c'est qu'il vous permet d'appliquer une syntaxe spéciale pour la sainte de référence.
Par exemple, si un bienheureux référence est stockée dans $obj
(associés en bless
avec le package "Classe"), alors $obj->foo(@args)
va appeler une sous-routine foo
et pass comme premier argument la référence $obj
, suivi par le reste des arguments (@args
). Le sous-programme doit être défini dans le package "Classe". Si il n'y a pas de sous-routine foo
dans le paquet "Classe", une liste des autres paquets (pris sous forme du tableau @ISA
dans le package "Classe") seront recherchés et le premier sous-routine foo
sera appelé.
Voir « bénir mes référents » retour de 1999. Semble assez détaillée. (L' entrée manuelle de Perl n’a beaucoup à dire là-dessus, malheureusement.)
Par exemple, si vous pouvez être sûr que n’importe quel objet Bug va être un hachage béni, vous pouvez remplir (enfin !) dans le code manquant dans la méthode Bug::print_me :
Maintenant, chaque fois que la méthode print_me est appelée via une référence à un hachage qui est été béni dans la classe bogue, la variable $self extrait la référence qui a été transmise comme premier argument et les instructions d’impression accéder les différentes entrées de la table de hachage béni.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.