2011-08-24 9 views

risposta

11

: 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 parametri

Si può leggere questo come:

sub foo : method { 
    my ($self) = shift @_; 
    return $self->bar(@_); 
} 
+0

Che cosa significa ' sub foo: method {shift-> bar (@_)} 'significa nel suo insieme? – asker

+0

Ho aggiunto ulteriori dettagli –

+0

Sembra che funzioni ancora senza l'attributo 'method', giusto? – asker

Problemi correlati