J'écris un module Perl Je veux utiliser Galaxy :: Sge :: makejobsh code> avec OO. P>
makejobsh-> nouveau () code> au lieu de
galaxy :: sge :: makejobsh-> nouveau () code>,
ou d'autres noms de noms. Comment puis-je faire ça? P>
5 Réponses :
Vous pouvez suggérer que vos utilisateurs utilisent le Aliased Module pour charger le vôtre:
package Galaxy::SGE::MakeJobSH; use Exporter 'import'; our @EXPORT = qw(MakeJobSH $MakeJobSH); our $MakeJobSH = __PACKAGE__; sub MakeJobSH () { __PACKAGE__ };
Je souhaite aliased code> faisait partie de la distribution standard.
Utiliser Package B> est beaucoup plus intelligent.
@Chris Lutz: Pourquoi quand constante est-il absolument identique à la même dactylographie? Stackoverflow.com/Questtions/1430548/...
merci cjm.
Je viens de choisir d'en ligne aliasé. p>
C'était la troisième option de ma réponse.
Aliased fonctionne bien lorsque vous souhaitez affecter uniquement les appels des packages qui demandent explicitement l'aliasing. Si vous souhaitez un aliasing global d'un espace de noms à un autre, utilisez package :: alias à la place . p>
Je ne me préoccupe pas d'aliasing. Je pense que c'est la mauvaise façon d'y aller. Si vous cherchez simplement moins à taper, c'est peut-être la réponse (mais une nouvelle dépendance plus bénéfice que le risque?). Je n'aime pas l'idée de tromper un programmeur de maintenance en cachant le vrai nom de lui depuis que l'aliasing se produit un long chemin loin de son utilisation et il n'y a aucune indication que ce qui ressemble à un nom de classe n'est pas une véritable classe.
Je cherche principalement un sous-classement facile, je laisse donc la classe décider de lui-même quel module mettra en œuvre une partie. P>
Par exemple, je pourrais commencer par une classe qui veut utiliser dans l'application, j'ai choisi de Utilisez 'FOO :: BAR': P> FOO pour gérer une partie du travail. Je sais que je souhaiterais peut-être sous-classe
foo code> plus tard, donc je ne le code pas dur: p>
#!perl
use Foo::Bar::Baz;
my $obj = Foo::Bar::Baz->new();
C'est presque la même approche que aliased code> mais à l'aide du module PERL standard: