Moose kullanıyorum ve projemde yöntem çağrılarını kaydırmam gerekiyor. Sarma kodumun en dış değiştirici olması önemlidir.Perl Moose Metodu Değiştiriciler: 'Önce' ve 'sonra' önce 'etrafında' ara '
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
Bu benim benim Rolün değiştiricileri olduğunu makul emin olmasını sağlar: Ne sonra Moose Rolü benim yöntemi düzenleyicileri koymak ve şimdiye kadar yaptığım böyle benim sınıfın sonunda bu rolü uygulamalı Son olarak tanımlanmış, bu yüzden bana "önce" ve "sonra" için doğru davranışı veriyor. (Rolde "önce" ve "sonra", ilk ve sonuncu olarak adlandırılır.)
Aslında bunun yeterli olacağını düşündüm, ama şimdi "etrafındaki" yöntemlerle benzer yöntemlerle sarmak zorundayım. Moose'un üzerine kurulu olduğu Class :: MOP, öncelikle "etrafında" değiştiricileri uygular, bu nedenle "önce" ve "sonra" dan önce çağrılırlar. Benim "etrafında" değiştirici almak için nasıl
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
Herhangi bir fikir:
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
Gerçekten böyle bir şey gerekir: Daha fazla ayrıntı için
, işte değiştiricilerin Şu anki arama sırasıdır İstediğim yerde/uygulanacak mı? Bazı sembollerin hacklemesini yapabildiğimi biliyorum (Class :: MOP zaten yapıyor) ama ben gerçekten değil.
, :: yerine' with' daha apply_all_roles'? – perigrin
Rolümdeki 'önce' ve 'sonra' değiştiricilerin, sınıfta zaten mevcut olabilecek diğer modifiye edicilerle karşılaştırıldığında ilk veya sonuncu olarak çalıştırılmasını istedim. Rolün manuel olarak uygulanması değiştiricileri daha sonra tanımlar ve sonra değiştiriciler ilk önce (önceki için) ve son (sonraki için) çalışır. –
@perigrin Sonunda senin ve Ether'in sorusunu anladım. Rolü, düşündüğüm gibi apply_all_roles ile uygulamanıza gerek yok.Ben Moose için hala yeni ve rolünü manuel olarak uygulama ihtiyacı duyma fikrine asıldım. Yapmam gereken tek şey, dosyanın sonunda (diğer modifiye edicilerden sonra) baştan çok "ile" ile uygulamaktı. –