Odio semplicemente come l'accessor CGI::Application per l'oggetto CGI
si chiami query
.In Perl, qual è il modo giusto per una sottoclasse di aliasare un metodo nella classe base?
Vorrei mie classi di istanza per essere in grado di utilizzare una funzione di accesso di nome cgi
per ottenere l'oggetto CGI
associato con l'istanza corrente della mia CGI::Application
sottoclasse.
Ecco un esempio autonomo di quello che sto facendo:
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');
Questo funziona come penso che dovrebbe e non riesco a vedere alcun problema (ad esempio, se avessi voluto ereditare da My::Merhaba
: sottoclassi non c'è bisogno di sapere nulla di merhaba
).
Sarebbe stato meglio/più corretto scrivere
sub merhaba {
my $self = shift;
return $self->hello(@_);
}
Quali sono i vantaggi/svantaggi di usare goto &NAME
allo scopo di aliasing un nome di metodo? C'è un modo migliore?
Nota: Se avete una voglia di rispondere con goto
è il male non lo fanno perché questo uso di goto
di Perl è diverso da quello che avete in mente.
Non vedo il punto di utilizzare 'goto & NAME' in questo modo. Il wrapper 'sub {}' aggiunge una nuova cornice allo stack delle chiamate. Potresti anche chiamare direttamente il metodo. –
@Michael Carman usando 'can' come nella prima parte della risposta di @Eric Strom elimina quella questione in cui credo. –
Ero solo curioso di avere qualche progresso con 'Method :: Alias'. –