L'héritage Afaik dans Perl est généralement configuré comme suit:
package Mule; our @ISA = ("Horse", "Donkey");
3 Réponses :
BEGIN { require Horse; require Donkey; push @ISA, qw(Horse Donkey); }
Vous pouvez utiliser UTILISER PARENT QW (classes de base) ou utiliser la base QW (classes de base). Le parent est préférable sur la base car elle a beaucoup moins de magie sombre, mais ce n'est pas dans la base de la base.
Je suis trop rouillé à Perl pour en savoir plus sur «Parent». Merci @leon +1
Le module code> code> fonctionnera lorsque la classe mère est dans le même fichier. Voir Search.cpan.org/perldoc?base .
Leon: le parent est à base. Cela n'a tout simplement pas été aussi longtemps que la base.
@Fm: Comme le parent, seulement vous devez être explicite sur votre intention
En ce qui concerne Compile-VS-Run-Time:
en Perl, les modules (packages / espaces de noms) vivent généralement dans des fichiers distincts. C'est à dire. fichier fichier La sortie sera la suivante: p> par conséquent, un Il est correct, cependant, que l'attribution à Quelqu'un :: Module Code> serait trouvé dans certains / module.pm. Dans cette configuration, la différence de compile-vs-roulant ne comptera pas beaucoup. Le temps d'exécution du module que vous chargez via
use () code> sera avant que la compilation du code d'appel continue. Observateur: p>
certains / module.pm code>: p>
test.pl code>: p>
notre @isa = qw (base); code> sera exécuté avant que la compilation de votre programme principal continue après le chargement du module. P>
@isa code> ne garantit pas que le La classe de base a été chargée. C'est pourquoi nous avons le
utilise la base code> et
utilisez des pragmas parent code>. Si vous n'avez pas besoin spécifiquement de fonctionnalités de
Utiliser la base code> (champs) ni la compatibilité plus longue en arrière qu'elle fournit sur
Utiliser le parent code>, je vous suggère d'utiliser plus léger-poids
Utiliser le parent code>. p> p>
établir l'héritage au moment de la compilation évite une boucle de dépendance particulièrement difficile à déboguer, illustrée ci-dessous.
# Child.pm package Child; our @ISA = qw(Mother); use Foo; # Mother.pm package Mother; sub wibble { 42 } # Foo.pm package Foo; use Child; Child->wibble;
Merci, c'est une illustration utile.
Les modules
base code> et
parent code> vous permettent d'établir des relations ISA à la compilation. En revanche, modifier
@isa code> vous-même se produit au moment de l'exécution. À cette lumière, une façon de reformuler votre question est comme ceci: Est-il généralement avantageux d'établir le héritage précédent (compilation-heure) plutôt que plus tard, et si oui pourquoi? Voir également ces questions connexes: Stackoverflow.com/questions/1378309/... et Stackoverflow.com/questions/876471/... .
commence {@isa = ...}; code> se produit également au moment de la compilation.
@Fm merci de commentaire :-) J'ai reformulé la question