sub foo : method { shift->bar(@_) }
Co znaczy : method
?Jaka jest składnia użyta w sub foo: method {shift-> bar (@_)}?
nigdy nie używałem to w ten sposób ...
sub foo : method { shift->bar(@_) }
Co znaczy : method
?Jaka jest składnia użyta w sub foo: method {shift-> bar (@_)}?
nigdy nie używałem to w ten sposób ...
: method
jest function attribute opis. Tak zdefiniowany podprogram nie wywoła ostrzeżenia "Niejednoznaczne wywołanie rozwiązane jako CORE ::% s".
Od ysth „s komentarz:
Ostrzeżenie dzieje, gdy sub ma taką samą nazwę jak wbudowane i nazywa bez & a nie jako wywołanie metody; perl zamiast tego używa wbudowanego, ale ostrzega. Metoda: powoduje wyciszenie ostrzeżenia, ponieważ wyraźnie wskazuje, że sub nigdy nie było tak nazwane jako metoda nie-metoda.
Aktualizacja
Ten kod po prostu wywołuje metodę bar
gdy foo
nazywa się:
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
Więcej szczegółów:
: method
- Wskazuje, że odwołuje podprogram jest metoda . Tak zdefiniowany podprogram nie wywoła ostrzeżenia "Niejednoznaczne wywołanie rozwiązane jako CORE ::% s".shift
- pobiera pierwszy parametr z @_
, który będzie $self
->bar(@_)
- wywołanie tej samej metody klasy bar
ze wszystkimi innymi parametramiMożna odczytać to jako:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}
Co ' sub foo: method {shift-> bar (@_)} "średnia jako całość? – asker
Dodałem więcej szczegółów –
Wygląda na to, że nadal działa bez atrybutu 'method', prawda? – asker