Major
Nice to have
Detail
Anwendung
$x.copy()
Enthält $x eine Referenz auf ein Fachobjekt, so liefert $x.copy() eine tiefe Kopie dieses Objektes, in der alle über Kompositionsreferenzen erreichbare Objekte mitkopiert wurden. Andere Referenzen in dem kopierten Objektgraphen werden dann auf Objekte in dem neuen Graphen umgesetzt, wenn sie im ursprünglichen Graphen auf ein Objekt zeigten, das bei der Kopieroperation mitkopiert wurde.
$x.copy([context], [filter], [constructor])
Die Kopierfunktion kann drei optionale Argumente context, filter und constructor verarbeiten.
context ist das Context-Object, das bei der Anlage der top-level Kopie (von $x) mitgegeben wird. Normalerweise null.
filter entscheidet, ob eine bestimmte Eigenschaft aus dem Ursprungsgraphen mitkopiert werden soll. Die Filter-Funktion erhält drei Argumente.
- Das zu kopierende Attribut.
- Die zu kopierende Instanz aus dem Ursprungsgraphen.
- Die Kontext-Instanz, an der das zu kopierende Attribut definiert ist.
Ist die Entscheidung true, so wird das Attribut vom Ursprungsobjekt in das Zielobjekt kopiert. Ist das Attribut eine primitive Eigenschaft, wird der Wert direkt in das Zielobjekt übernommen. Ist das Attribut eine Referenz, wird diese Referenz entweder direkt übernommen, oder in den Zielgraphen umgeschrieben, je nachdem, ob das Ursprungsobjekt in der Kopieroperation kopiert wurde oder nicht. Ist das Attribut eine Komposition, wird eine tiefe Kopie des Ursprungsobjektes angefertigt.
Ist die Entscheidung false, so bleibt das Attribut im Zielobjekt uninitialisiert. In diesem Fall, könnte die Konstruktorfunktion für dieses Attribut einen Standardwert ausrechnen und zusammen mit der Konstruktion setzen.
Die Default-Implementierung ist attribute -> orig -> context -> true.
constructor ist eine Funktion, die ein Objekt aus dem Ursprungsgraphen nimmt und eine (uninitialisierte) Kopie dieses Objektes zurückliefert. Die Funktion erhält drei Argumente:
- Das zu kopierende Originalobjekt.
- Die Kontext-Referenz, über die das Originalobjekt mit seinem Kontext verknüpft ist (null, für die top-level Kopie).
- Das originale Kontext-Objekt, das das zu kopierende Originalobjekt in seiner Kontext-Referenz hält.
Liefert die Konstruktorfunktion null, wird ein Objekt vom selben Typ wie das Original angelegt.
Die Default-Implementierung ist orig -> reference -> context -> null.
Siehe auch doc:copy.
Test
- test.com.top_logic.model.search.expr.TestSearchExpression.testCopy()
- test.com.top_logic.model.search.expr.TestSearchExpression.testCopyFilter()
- test.com.top_logic.model.search.expr.TestSearchExpression.testCopyConstructor()