AClone()

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen

Allgemeines

AClone() erlaubt es, ein Array zu kopieren.

Ein Array existiert normalerweise nur einmal, und die Zuweisung eines Arrays an eine andere Variable erzeugt in der Zielvariablen nur eine Referenz:

aDaten := {"heute", "morgen", "übermorgen"}
aDaten2 := aDaten
aDaten2[2] := "nie"
? aDaten[2]  ==> "nie"

AClone() erzeugt eine Kopie des Arrays und weist diese einer Variablen zu.

Im Gegensatz zu ACopy() kopiert AClone() auch mehrdimensionale Arrays.


Syntax

AClone(aArray) => aGeklontesArray


Parameter

<aArray> ist ein Array, von dem eine identische Kopie erzeugt werden soll.



Rückgabewert

<aGekontesArray> ist eine identische Kopie von aArray.


Besonderheiten

Performanceschub bei grossen Arrays

Programmtechnisch kann es bei besonders grossen Arrays vorkommen, dass die Performance von AClone() schlecht ist. Es gibt die Möglichkeit, mit Var2Bin() und Bin2Var() AClone() zu simulieren:

vtemp:=var2Bin(atemp)
afilt:=bin2var(vtemp)

anstelle von

aFilt := AClone(aTemp)

Quelle

einfache und komplexe Datentypen

Einfache Datentypen (String, Numerisch, Logisch) in Array-Elementen werden kopiert, während bei komplexen Datentypen (Objekte) nur ein Verweis auf das Objekt kopiert wird. Ein Array-Element enthält ja nicht ein beliebiges Objekt, sondern nur einen Pointer auf das Objekt. AClone() kopiert diesen Pointer, und damit verweist auch das Array-Element im geklonten Array auf das gleiche Objekt:

aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aEins[3]:title := "was neues"
? aZwei[3]:title => "was neues"

Um unabhängige Objekte zu erhalten, müsste das entsprechende Element neu zugewiesen werden:

aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aZwei[3] := SetAppWindow()
aEins[3]:title := "was neues"
? aZwei[3]:title => (der bisherige Titel)


Querverweise

ACopy()


benötigte DLLs bzw. Include-Dateien

XPPRT1.dll

Zuordnung

Arrayfunktionen


Anwendungsbeispiel