148 votes

Ce que signifie exactement Perl ' s « bénir » faire ?

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 ?

149voto

Gordon Wilson Points 14721

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.

81voto

kixx Points 2452

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é.

20voto

Jon Skeet Points 692016

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.)

10voto

chaos Points 69029

Version courte : c’est le marquage ce hachage comme attaché à l’espace de noms actuel paquet (de sorte que ce paquet fournit l’implémentation de la classe).

-9voto

user800864 Points 26

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.com

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.

Powered by:

X