Sto usando Moose e ho bisogno di racchiudere le chiamate di metodo nel mio progetto. È importante che il mio codice di wrapping sia il modificatore più esterno. Quello che ho fatto fino ad ora è messo il mio metodo modificatori in un ruolo di Moose e poi applicato quel ruolo alla fine della mia classe in questo modo:Modificatori del metodo Perl Moose: chiama "intorno" prima di "prima" e "dopo"
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
Questo mi permette di essere ragionevolmente sicuri che i modificatori di mio mio ruolo sono definito per ultimo, quindi dandomi il comportamento corretto per "prima" e "dopo". (Il "prima" e "dopo" nel ruolo sono chiamati molto prima e molto ultimo.)
Originariamente pensavo che sarebbe stato sufficiente, ma ora ho davvero bisogno di avvolgere i metodi in modo simile con "intorno". Class :: MOP, su cui Moose è costruito, applica i modificatori "intorno" molto prima, quindi vengono chiamati dopo "prima" e prima "dopo".
Per maggiori dettagli, qui è l'ordine di chiamata corrente dei miei modificatori:
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
ho davvero bisogno di qualcosa di simile:
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
Tutte le idee su come ottenere il mio modificatore "giro" da applicare/chiamato dove lo voglio? So che potrei fare un po 'di hacking sui tavoli dei simboli (come già accade in Class :: MOP), ma preferirei non farlo.
Sono d'accordo con la seguente domanda di Ether, perché stai usando 'Moose :: Util :: apply_all_roles' piuttosto che' with'? – perigrin
Volevo che i modificatori "prima" e "dopo" del mio ruolo venissero eseguiti molto prima o molto ultimi rispetto ad altri modificatori che potrebbero esistere già nella classe. Applicare il ruolo manualmente definisce i modificatori in seguito e quindi i modificatori vengono eseguiti prima (per prima) e ultimi (per dopo). –
@perigrin Ho finalmente capito la tua e la domanda di Ether. Non ho bisogno di applicare il ruolo con apply_all_roles come pensavo.Sono ancora nuovo di Moose e sono rimasto bloccato dall'idea di dover applicare il ruolo "manualmente". Tutto quello che dovevo veramente fare era applicarlo con "con" alla fine del file (dopo gli altri modificatori) piuttosto che all'inizio. –