sub foo : method { shift->bar(@_) }
¿Qué es : method
en este lugar?¿Cuál es la sintaxis utilizada para sub foo: método {shift-> bar (@_)}?
nunca he utilizado de esta manera ...
sub foo : method { shift->bar(@_) }
¿Qué es : method
en este lugar?¿Cuál es la sintaxis utilizada para sub foo: método {shift-> bar (@_)}?
nunca he utilizado de esta manera ...
: method
es function attribute descripción. Una subrutina así marcada no activará la advertencia "Llamada ambigua resuelta como CORE ::% s".
De ysth 's comentario:
La advertencia ocurre cuando el sub tiene el mismo nombre que una orden interna y se llama sin & y no como una llamada de método; perl usa el builtin pero da una advertencia. El método: silencia la advertencia porque indica claramente que el submarino nunca fue pensado para ser llamado como no método de todos modos.
actualización
Este código simplemente llama al método bar
cuando foo
se llama:
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
Más detalles:
: method
- Indica que la subrutina hace referencia es un método . Una subrutina así marcada no activará la advertencia "Llamada ambigua resuelta como CORE ::% s".shift
- Obtiene primer parámetro de @_
, que será $self
->bar(@_)
- llaman mismo método de clase bar
con todos los demás parámetrosUsted puede leer esto como:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}
¿Qué ' sub foo: método {shift-> bar (@_)} 'significa como un todo? – asker
He agregado más detalles –
Parece que todavía funciona sin el atributo 'method', ¿verdad? – asker