Ich habe ein Buch über Scala gelesen und erwähne stapelbare Änderungen mit Merkmalen . Was sind stapelbare Modifikationen und für welche Zwecke sollen sie verwendet werden?
Die fundamentale Eigenschaft, die stapelbare Modifikationen auszeichnet (wie die Terminologie sowieso in scala verwendet wird) ist, dass "super" dynamisch beeinflusst wird, je nachdem, wie das Merkmal gemischt ist, während im Allgemeinen super ein statisch bestimmtes Ziel ist.
>Wenn Sie
schreiben %Vor%dann für Foo "super" wird immer Bar sein.
Wenn Sie
schreiben %Vor%Dann bleibt für diese Methode Super unbekannt, bis die Klasse gemacht ist.
%Vor%Warum ist das interessant? Ein anschauliches Beispiel könnten Daten sein, die Sie komprimieren, verschlüsseln und digital signieren möchten. Vielleicht möchten Sie komprimieren, dann verschlüsseln und dann signieren, oder Sie möchten verschlüsseln, dann signieren, dann komprimieren usw. Wenn Sie Ihre Komponenten auf diese Weise entwerfen, können Sie ein benutzerdefiniertes Objekt mit genau den Bits instanziieren, die Sie nach Ihren Wünschen organisieren möchten.
Ich schaute Real-World Scala Präsentation wo der Begriff stapelbare Änderungen wird ebenfalls verwendet. Anscheinend sind es Merkmale, die beim Überschreiben die Super-Methode aufrufen, die Funktionalität im Wesentlichen hinzufügen und sie nicht ersetzen. So akkumulieren Sie Funktionalität mit Merkmalen, und es kann verwendet werden, wo in Java oft Aspekte verwendet werden. Trait spielt die Rolle eines Aspekts, indem es die "interessanten" Methoden außer Kraft setzt und die spezifischen Funktionen wie Protokollierung usw. hinzufügt und dann super und "den Ball passierend" zum nächsten Merkmal in der Kette aufruft. HTH.