Ich hasse einfach wie CGI::Application 's Accessor für die CGI
Objekt heißt query
.Was ist in Perl der richtige Weg für eine Unterklasse, um eine Methode in der Basisklasse umzubenennen?
Ich möchte, dass meine Instanzklassen einen Accessor namens cgi
verwenden können, um das Objekt CGI
zu erhalten, das der aktuellen Instanz meiner -Unterklasse zugeordnet ist. Hier
ist ein in sich geschlossenes Beispiel dafür, was ich tue:
package My::Hello;
sub hello {
my $self =shift;
print "Hello @_\n";
}
package My::Merhaba;
use base 'My::Hello';
sub merhaba {
goto sub { shift->hello(@_) };
}
package main;
My::Merhaba->merhaba('StackOverflow');
Dies funktioniert, wie ich denke, es sollte, und ich kann keine Probleme sehen (sagen wir, wenn ich von My::Merhaba
erben wollte: Subklassen muss nichts über merhaba
wissen).
Wäre es besser/richtigere gewesen
sub merhaba {
my $self = shift;
return $self->hello(@_);
}
Was sind die Vorteile/Nachteile von goto &NAME
von Aliasing einen Methodennamen für den Zweck verwenden zu schreiben? Gibt es einen besseren Weg?
Hinweis: Wenn Sie einen Drang zu reagieren mit goto
ist böse tun es nicht, weil diese Verwendung von Perl goto
anders ist als das, was Sie im Kopf haben.
Ich sehe nicht den Punkt der Verwendung von 'goto & NAME' auf diese Weise. Der 'sub {}' -Wrapper fügt dem Call-Stack einen neuen Frame hinzu. Sie können die Methode auch direkt aufrufen. –
@Michael Carman mit 'can' wie im ersten Teil von @Eric Strom's Antwort beseitigt dieses Problem, glaube ich. –
Ich war nur neugierig auf jeden Fortschritt mit 'Methode :: Alias'. –