Po prostu nienawidzę tego, jak akcesor CGI::Application dla obiektu nosi nazwę .W języku Perl, jaki jest właściwy sposób dla podklasy do aliasów metody w klasie bazowej?
Chciałbym moje klasy instancji, aby móc korzystać z akcesor nazwie cgi
aby uzyskać obiekt CGI
związanego z bieżącej instancji mojego CGI::Application
podklasy.
Oto samowystarczalny przykładem tego, co robię:
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');
To działa jak myślę, że powinien i nie widzę żadnych problemów (powiedzmy, jeśli chcę dziedziczyć My::Merhaba
: podklasy nie musisz nic wiedzieć o merhaba
).
Czy byłoby lepiej/bardziej poprawne pisać
sub merhaba {
my $self = shift;
return $self->hello(@_);
}
Jakie są zalety/wady korzystania goto &NAME
dla celów aliasing nazwę metody? Czy istnieje lepszy sposób?
Uwaga: Jeśli masz ochotę odpowiedzieć goto
jest zła nie rób tego, bo to wykorzystanie Perl goto
jest inna niż to, co masz na myśli.
Nie widzę sensu używania 'goto & NAME' w ten sposób. Opakowanie 'sub {}' dodaje nową ramkę do stosu wywołań. Równie dobrze możesz wywołać metodę bezpośrednio. –
@Michael Carman używający 'can', jak w pierwszej części odpowiedzi @Eric Strom, eliminuje ten problem. –
Po prostu byłem ciekawy postępów w metodzie "Metoda :: Alias". –