Używam Łosia i potrzebuję zawijać wywołania metod w moim projekcie. Ważne jest, aby mój kod zawijania był najbardziej zewnętrznym modyfikatorem. Co zrobiłem do tej pory kładzie się moja metoda modyfikatory w Moose Role, a następnie zastosować tę rolę pod koniec mojej klasy jak ten:Modyfikatory Metody Perl Moose: wywoływanie "w pobliżu" przed "przed" i "po"
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
To pozwala mi być pewnym, że modyfikatory mojego moja rola są zdefiniowane jako ostatnie, dlatego daje mi prawidłowe zachowanie dla "przed" i "po". ("Przed" i "po" w roli są nazywane bardzo pierwsze i ostatnie).
Początkowo sądziłem, że to będzie wystarczające, ale teraz naprawdę muszę owijać metody w podobny sposób z "dookoła". Klasa :: MOP, na której zbudowany jest Moose, stosuje najpierw modyfikatory "dookoła", dlatego są one nazywane po "przed" i przed "po".
Aby uzyskać więcej szczegółów, tutaj jest obecny porządek powołanie moich modyfikatorów:
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
naprawdę muszę coś takiego:
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
jakieś pomysły w jaki sposób dostać moje „wokół” modyfikator być stosowane/wywoływane tam, gdzie chcę? Wiem, że mogłem zrobić hakowanie tablic symboli (jak robi to już klasa :: MOP), ale wolałbym nie.
Zgadzam się z poniższym pytaniem Eteru, dlaczego używasz 'Łoś :: Util :: apply_all_roles' zamiast' with'? – perigrin
Chciałam, aby modyfikatory "przed" i "po" w mojej roli były uruchamiane jako pierwsze lub ostatnie w porównaniu do innych modyfikatorów, które mogą istnieć już w klasie. Zastosowanie roli ręcznie definiuje modyfikatory później, a następnie modyfikatory są uruchamiane jako pierwsze (dla wcześniejszych) i ostatnie (dla późniejszych). –
@perigrin W końcu zrozumiałem twoje i Ether'a pytanie. Nie muszę stosować roli z apply_all_roles, tak jak myślałem.Wciąż jestem nowicjuszem w Moose i odkładam słuchawkę na myśl o konieczności zastosowania roli "ręcznie". Wszystko, co naprawdę musiałem zrobić, to zastosować go z "z" na końcu pliku (po innych modyfikatorach), a nie na początku. –