Kontext :: Preserve.

RUN Code Nach einem Subroutine-Anruf, der den Kontext erhalten hat, hätte die Subroutine gesehen, ob es die letzte Aussage im Anrufer wäre
Jetzt downloaden

Kontext :: Preserve. Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • Perl Artistic License
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Jonathan Rockway
  • Website des Verlags:
  • http://search.cpan.org/~jrockway/

Kontext :: Preserve. Stichworte


Kontext :: Preserve. Beschreibung

Führen Sie den Code nach einem Subroutine-Anruf aus, um den Kontext zu erhalten, hätte die Subroutine gesehen, ob es die letzte Aussage im Anrufer wäre Kontext: mein ($ Ergebnis, @result); # Führen Sie einen Sub im richtigen Kontext aus, wenn (! Defined W-Array) {etwas :: Code (); } ELSIF (WantArray) {@result = Whole :: Code (); } else {$ result = einige :: code (); } # etwas nach einigen :: Code $ _ + = 42 für (@result, $ ergebnis); # schließlich den korrekten Wert zurück, wenn (! definiert W-Array) {RETURN; } ELSIF (WantArray) {Return @Result; } else {return $ result; } Jetzt können Sie dies jetzt einfach schreiben: Verwenden Sie den Kontext :: Preserve; return preserve_context {etwas :: Code ()} After => sub {$ _ + = 42 für @_}; Manchmal müssen Sie eine Funktion anrufen, die Ergebnisse erzielen, auf die Ergebnisse eingehen, dann das Ergebnis der Funktion zurückgeben. Dies ist wegen Kontexten schmerzhaft; Die Originalfunktion kann sich anders verhalten, wenn er in Void, Scalar- oder List-Kontext aufgerufen wird. Sie können die verschiedenen Fälle ignorieren und einfach nur einen auswählen, aber das ist fragil. Um Dinge richtig zu machen, müssen Sie sehen, in welchem Fall Sie angerufen werden, und rufen Sie in diesem Zusammenhang die Funktion an. Dies führt zu 3 Codepfaden, was ein Schmerz ist, um einzugeben (und warten). Dieses Modul automatisiert den Prozess. Sie geben einen CodeRef an, der die "Originalfunktion" ist, und ein weiterer CobereF, der nach den ursprünglichen Läufen ausgeführt wird. Sie können den Rückgabewert (Aliased to @_) hier ändern und tun, was Sie sonst noch tun müssen. Mwingen ist in beiden CodeRefs korrekt; In "danach" wird der Rückgabewert jedoch ignoriert, und der Wert W-Array-Renditen bezieht sich auf den Kontext, der die ursprüngliche Funktion einberufen wurde. Anforderungen: · Perl.


Kontext :: Preserve. Zugehörige Software