Ich benutze Moose und ich muss Methodenaufrufe in meinem Projekt umhüllen. Es ist wichtig, dass mein Umbruchcode der äußerste Modifikator ist. Was ich bisher getan ist meine Methode Modifikatoren in einem Elch Role setzen und angewandt, dann wird diese Rolle am Ende meiner Klasse wie folgt:Perl Moose Method Modifiers: Call 'herum' vor 'vor' und 'nach'
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
Das ist mir einigermaßen sicher sein kann, dass meine meine Rolle Modifikatoren Definiert als letztes und gibt mir das richtige Verhalten für "vorher" und "danach". (Das "Vorher" und das "Nachher" in der Rolle werden zuerst und zuletzt genannt.)
Ursprünglich dachte ich, das wäre ausreichend, aber jetzt muss ich die Methoden in ähnlicher Weise mit "around" umhüllen. Class :: MOP, auf dem Moose basiert, wendet "around" -Modifikatoren zuerst an, daher werden sie nach "vorher" und vor "nachher" benannt.
Für weitere Einzelheiten hier ist die aktuelle Berufung Reihenfolge meiner Modifikatoren:
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
ich wirklich so etwas wie dieses brauchen:
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
Alle Ideen, wie meine „um“ Modifikator zu erhalten Wo soll ich es anwenden? Ich weiß, dass ich einige Symboltabellen hacken könnte (wie Class :: MOP macht das schon), aber ich würde es wirklich nicht tun.
Ich stimme Ether Frage unten, warum verwenden Sie 'Moose :: Util :: apply_all_roles' anstatt 'mit'? – perigrin
Ich wollte, dass die Modifizierer 'before' und 'after' in meiner Rolle ganz im Vergleich zu anderen Modifiern, die bereits in der Klasse existieren, zuerst oder zuletzt ausgeführt werden. Wenn Sie die Rolle manuell zuweisen, werden die Modifikatoren später definiert und dann werden die Modifikatoren zuerst (für vorher) und zuletzt (für nach) ausgeführt. –
@perigrin Ich habe endlich deine und Ethers Frage verstanden. Ich muss die Rolle nicht mit apply_all_roles anwenden, wie ich dachte.Ich bin immer noch neu bei Moose und habe mich auf die Idee gefasst, die Rolle "manuell" anwenden zu müssen. Alles, was ich wirklich tun musste, war, es mit "mit" am Ende der Datei (nach den anderen Modifikatoren) und nicht am Anfang anzuwenden. –