Simplemente odio cómo el acceso de CGI::Application para el objeto CGI
se llama query
.En Perl, ¿cuál es la forma correcta para que una subclase haga alias un método en la clase base?
Me gustaría que mis clases de instancia puedan usar un acceso de acceso llamado cgi
para obtener el objeto CGI
asociado con la instancia actual de mi subclase CGI::Application
.
Aquí está un ejemplo de auto-contenido de lo que estoy haciendo:
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');
Esto está funcionando, ya que creo que debería y no puedo ver ningún problema (por ejemplo, si quería heredar de My::Merhaba
: Las subclases no necesita saber nada sobre merhaba
).
¿Hubiera sido mejor/más correcto escribir
sub merhaba {
my $self = shift;
return $self->hello(@_);
}
¿Cuáles son las ventajas/desventajas de utilizar goto &NAME
a los efectos de aliasing un nombre de método? ¿Hay una mejor manera?
Nota: Si usted tiene una necesidad de responder con goto
es malo no lo hacen debido a este uso de goto
de Perl es diferente de lo que tiene en mente.
No veo el sentido de usar 'goto & NAME' de esta manera. El contenedor 'sub {}' agrega un nuevo marco a la pila de llamadas. También puede llamar al método directamente. –
@Michael Carman usa 'can' como en la primera parte de la respuesta de @Eric Strom elimina ese problema, creo. –
Tenía curiosidad sobre cualquier progreso con 'Method :: Alias'. –