Perl: Statique vs méthodes de paquet

J'ai besoin de créer un paquet qui sera utilisé par d'autres développeurs. Quelle est la meilleure façon d'implémenter des méthodes statiques? Pour les méthodes statiques (classe), je dois attendre le premier paramètre $ class, et la méthode doit être appelée en tant que méthode de classe:

My::Package->Sub1();

D'autre part, je peux écrire un sous-programme "régulier" (pas de paramètre $ class attendu) qui fera parfaitement la même chose, mais qui doit être appelé différemment

My::Package::Sub1();

Donc, fondamentalement, il n'y a aucune différence avec la perspective de la fonctionnalité métier (du moins je ne la vois pas, sauf la disponibilité du nom de package via le premier paramètre), mais 2 manières différentes de l'implémenter et de l'appeler. Un peu confus. De quelle façon dois-je utiliser et quand? Y a-t-il une règle? Aussi, devrais-je vérifier si la méthode a été appelée comme je m'y attendais (statique vs paquet)?

0

1 Réponses

First, a functional point: If a 2nd Class is create that inherits from My::Package, Child::Class::Sub1() will be undefined, and if Sub1 is written as a non-OO subroutine, Child::Class->Sub1() will ignore the fact that it's being called from Child::Class.

En tant que tel, pour le bien des programmeurs utilisant votre module, vous voudrez que toutes les sous-routines d'un paquet/classe répondent à une structure/méthodologie d'appel cohérente. Votre module devrait être une bibliothèque de sous-programmes/fonctions ou une classe complète de méthodes. Si une partie est OO, faites tout OO. Il est possible de créer des sous-routines pour se comporter en mode mixte, mais cela complique inutilement le code, et semble être passé de mode sur le CPAN.

Now if there is truly no reason to distinguish between My::Package->Sub1() and Child::Class->Sub1(), then you can feel free to ignore the implicit class name parameter you'll be passed. This doesn't mean you shouldn't expect that parameter or that you should encourage a non-OO call format in an OO Module.

0
ajouté
Je l'ai. Je vous remercie!
ajouté l'auteur AndyH, source