sub foo : method { shift->bar(@_) }
Cosa significa ": method
"?Qual è la sintassi utilizzata per sub foo: method {shift-> bar (@_)}?
ho mai usato in questo modo ...
sub foo : method { shift->bar(@_) }
Cosa significa ": method
"?Qual è la sintassi utilizzata per sub foo: method {shift-> bar (@_)}?
ho mai usato in questo modo ...
: method
è function attribute descrizione. Una subroutine così marcata non attiverà l'avviso "Ambigua chiamata risolta come CORE ::% s".
Da commentoysth s':
L'avvertimento avviene quando il sub ha lo stesso nome di un comando incorporato e si chiama, senza & e non come una chiamata di metodo; perl usa invece il builtin ma dà un avvertimento. Il metodo: attenua l'avviso perché indica chiaramente che il sottotitolo non è mai stato concepito come un non-metodo.
Aggiornamento
Questo codice chiama proprio metodo bar
quando foo
si chiama:
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
Maggiori dettagli:
: method
- Indica che la subroutine si fa riferimento è un metodo . Una subroutine così marcata non attiverà l'avviso "Ambigua chiamata risolta come CORE ::% s".shift
- ottiene il primo parametro da @_
, che sarà $self
->bar(@_)
- chiamano stesso metodo di classe bar
con tutti gli altri parametriSi può leggere questo come:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}
Che cosa significa ' sub foo: method {shift-> bar (@_)} 'significa nel suo insieme? – asker
Ho aggiunto ulteriori dettagli –
Sembra che funzioni ancora senza l'attributo 'method', giusto? – asker