Frage

Ich habe ein Buch über Scala zu lesen und es gibt Erwähnung von stapelbar Änderungen mit Merkmale . Was sind stapelbar Änderungen und für welche Zwecke sind sie verwendet werden soll?

War es hilfreich?

Lösung

Die grundlegende Eigenschaft, die stapelbar Modifikationen unterscheidet (wie die Terminologie in Scala sowieso verwendet wird) besteht darin, dass „super“ dynamisch auf der Grundlage beeinflusst wird, wie das Merkmal eingemischt, während im allgemeinen Super ist ein statisch bestimmtes Ziel.

Wenn Sie schreiben

abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }

dann für Foo "super" wird immer Bar.

Wenn Sie schreiben

trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }

Dann für diese Methode Super bleibt unbekannt, bis die Klasse gemacht wird.

trait Foo2 extends Foo { abstract override def bar(x: Int) = x * super.bar(x) }

scala> (new Foo with Foo2 with Foo1).bar(5)
res0: Int = 30

scala> (new Foo with Foo1 with Foo2).bar(5)
res1: Int = 50

Warum ist das interessant? Ein anschauliches Beispiel könnten einige Daten sein, die Sie komprimieren möchten, verschlüsseln und digital signieren. Sie könnten dann komprimieren möchten signieren verschlüsseln dann, oder Sie könnten dann verschlüsseln möchten schreiben dann komprimieren, etc. Wenn Sie Ihre Komponenten auf diese Weise entwerfen, können Sie ein individuelles Objekt mit genau den Bits instanziiert Sie organisiert die Art und Weise wollen Sie wollen.

Andere Tipps

Ich schaute auf Real-World Scala Präsentation , wo der Begriff stapelbar Änderungen wird auch verwendet. Offenbar ist es Merkmale, die die Super-Methode aufrufen, wenn zwingende, im Wesentlichen Funktionalität hinzugefügt und ersetzt sie nicht. So sammeln Sie an Funktionalität mit Zügen, und es kann verwendet werden, in denen in Java oft wir Aspekte verwenden. Trait spielt die Rolle eines Aspekts, Überschreiben der „interessanten“ Methoden und Hinzufügen der spezifischen Funktionen wie Logging etc. und dann Super aufrufen und „vorbei an den Ball“ zum nächsten Zug in der Kette. HTH.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top