Objekt

In AutoHotkey ist der reguläre Objektdatentyp ein assoziatives Array, dessen Verhalten individuell angepasst werden kann. Standardmäßig unterstützen alle Objekte, die mit {}, [], Object() und Array() erstellt wurden, die folgenden Methoden, Eigenschaften und Funktionen.

Inhaltsverzeichnis

Methoden

InsertAt [v1.1.21+]

Fügt einen oder mehrere Werte auf einer Position innerhalb eines linearen Arrays ein.

Objekt.InsertAt(Pos, Wert1 , Wert2, ... WertN)

Parameter

Pos

Die Position, auf der Wert1 eingefügt werden soll. Nachfolgende Werte werden auf Pos+1, Pos+2 usw. eingefügt.

Wert1 ...

Ein oder mehrere Werte, die eingefügt werden sollen. Um ein Array von Werten einzufügen, übergeben Sie dasArray* als letzten Parameter.

Bemerkungen

InsertAt ist das Gegenstück zu RemoveAt.

Da Objekte assoziative Arrays sind, ist Pos außerdem der Integerschlüssel, der Wert1 zugeordnet wird. Alle Elemente, die sich auf oder rechts von Pos befinden, werden um genau die Anzahl der Wertparameter nach rechts verschoben, selbst wenn einige Werte fehlen (d.h. wenn das Objekt ein lückenhaftes Array ist). Zum Beispiel:

x := []
x.InsertAt(1, "A", "B") ; =>  ["A", "B"]
x.InsertAt(2, "C")      ; =>  ["A", "C", "B"]

; Lückenhafte/leere Elemente bleiben erhalten:
x := ["A", , "C"]
x.InsertAt(2, "B")      ; =>  ["A", "B",    , "C"]

x := ["C"]
x.InsertAt(1, , "B")    ; =>  [   , "B", "C"]

InsertAt sollte nur verwendet werden, wenn die Integerschlüssel des Objekts Positionen in einem linearen Array repräsentieren. Wenn das Objekt willkürliche Integerschlüssel wie IDs oder Handles enthält, wird InsertAt wahrscheinlich unerwünschte Nebeneffekte haben. Zum Beispiel:

x := [], handleX := 0x4321, handleY := 0x1234
x.InsertAt(handleX, "A")
MsgBox % x[handleX]  ; A - Okay
x.InsertAt(handleY, "B")
MsgBox % x[handleX]  ; Leer
MsgBox % x[handleX+1]  ; Dies ist die neue "Position" von "A"

InsertAt hat keinen Effekt auf Zeichenketten- oder Objektschlüssel und kann daher problemlos für Objekte mit unterschiedlichen Schlüsseltypen verwendet werden.

RemoveAt [v1.1.21+]

Entfernt Elemente an einer Position innerhalb eines linearen Arrays.

EntfernterWert := Objekt.RemoveAt(Pos)
EntfernteElementeAnzahl := Objekt.RemoveAt(Pos, Länge)

Parameter

Pos

Die Position eines oder mehrerer Werte, die entfernt werden sollen.

Länge

Wenn weggelassen, wird nur ein Element entfernt. Andernfalls geben Sie die Länge des Wertebereichs an, der entfernt werden soll. Es werden die Elemente von Pos bis Pos+Länge-1 entfernt.

Rückgabewert

Wenn Länge weggelassen wird, wird der an Pos entfernte Wert zurückgegeben (leer, wenn es keinen gibt). Andernfalls ist der Rückgabewert die Anzahl der entfernten Elemente, die Werte enthielten. Die Anzahl kann bei einem lückenhaften Array von Länge abweichen, liegt aber immer im Bereich von 0 bis Länge.

Bemerkungen

RemoveAt ist das Gegenstück zu InsertAt.

Die restlichen Elemente rechts von Pos werden um den via Länge definierten Wert (oder standardmäßig um 1) nach links verschoben, selbst wenn einige Elemente im entfernten Bereich keine Werte haben. Zum Beispiel:

x := ["A", "B"]
MsgBox % x.RemoveAt(1)  ; A
MsgBox % x[1]           ; B

x := ["A", , "C"]
MsgBox % x.RemoveAt(1, 2)  ; 1
MsgBox % x[1]              ; C

RemoveAt sollte nur verwendet werden, wenn die Integerschlüssel des Objekts Positionen in einem linearen Array repräsentieren. Wenn das Objekt willkürliche Integerschlüssel wie IDs oder Handles enthält, wird RemoveAt wahrscheinlich unerwünschte Nebeneffekte haben. Zum Beispiel:

x := {0x4321: "A", 0x1234: "B"}
MsgBox % x.RemoveAt(0x1234) ; B
MsgBox % x[0x4321]          ; Leer
MsgBox % x[0x4321-1]        ; A

RemoveAt hat keinen Effekt auf Zeichenketten- oder Objektschlüssel und kann daher problemlos für Objekte mit unterschiedlichen Schlüsseltypen verwendet werden.

Push [v1.1.21+]

Fügt Werte am Ende eines Arrays an.

Index := Objekt.Push(Wert, Wert2, ..., WertN)

Parameter

Wert ...

Ein oder mehrere Werte, die eingefügt werden sollen. Um ein Array von Werten einzufügen, übergeben Sie dasArray* als letzten Parameter.

Rückgabewert

Diese Methode gibt die Positionsnummer des zuletzt eingefügten Wertes zurück. Diese Nummer kann negativ sein, wenn das Array nur Elemente mit negativem Index enthält.

Bemerkungen

Der erste Wert wird auf Position 1 eingefügt, wenn das Array leer ist oder nur Zeichenketten- oder Objektschlüssel enthält.

Andernfalls wird der erste Wert auf Objekt.MaxIndex() + 1 eingefügt, selbst wenn diese Position negativ oder Null ist. Wenn dies nicht erwünscht ist und das Objekt negative Schlüssel enthält, kann stattdessen Objekt.InsertAt(Objekt.Length() + 1, ...) verwendet werden.

Pop [v1.1.21+]

Entfernt das letzte Array-Element und gibt es zurück.

EntfernterWert := Objekt.Pop()

Wenn es keine Array-Elemente gibt, ist der Rückgabewert eine leere Zeichenkette. Andernfalls ist es äquivalent zu:

EntfernterWert := Objekt.RemoveAt(Objekt.Length())

Delete [v1.1.21+]

Entfernt Schlüssel-Wert-Paare aus einem Objekt.

EntfernterWert := Objekt.Delete(Schlüssel)
EntfernteElementeAnzahl := Objekt.Delete(ErsterSchlüssel, LetzterSchlüssel)

Parameter

Schlüssel

Ein beliebiger Schlüssel.

ErsterSchlüssel, LetzterSchlüssel

Ein gültiger Bereich von Integer- oder Zeichenkettenschlüsseln, wobei ErsterSchlüssel <= LetzterSchlüssel ist. Beide Schlüssel müssen vom selben Typ sein.

Rückgabewert

Bei nur einem Parameter wird der entfernte Wert zurückgegeben (leer, wenn es keinen gibt). Andernfalls ist der Rückgabewert die Anzahl der gefundenen und entfernten Schlüssel.

Bemerkungen

Im Gegensatz zu RemoveAt hat Delete keinen Effekt auf Schlüssel-Wert-Paare, die es nicht entfernt. Zum Beispiel:

x := ["A", "B"]
MsgBox % x.RemoveAt(1)  ; A
MsgBox % x[1]           ; B

x := ["A", "B"]
MsgBox % x.Delete(1)    ; A
MsgBox % x[1]           ; Leer

MinIndex / MaxIndex [AHK_L 31+]

Gibt den niedrigsten/höchsten Integerschlüssel zurück, falls vorhanden.

MinIndex := Objekt.MinIndex()
MaxIndex := Objekt.MaxIndex()

Wenn keine Schlüssel vorhanden sind, wird eine leere Zeichenkette zurückgegeben.

Length [v1.1.21+]

Gibt die Länge eines linearen Arrays zurück.

Länge := Objekt.Length()

Diese Methode gibt die Länge eines linearen Arrays zurück, beginnend bei Position 1, d.h. entweder den höchsten positiven Integerschlüssel im Objekt, oder 0, wenn es keinen gibt.

MsgBox % ["A", "B", "C"].Length()  ;  3
MsgBox % ["A",    , "C"].Length()  ;  3
MsgBox % {-10: 0, 10: 0}.Length()  ; 10
MsgBox % {-10: 0, -1: 0}.Length()  ;  0

Count [v1.1.29+]

Gibt die Anzahl der Schlüssel-Wert-Paare in einem Objekt zurück.

Anzahl := Objekt.Count()

Beispiele:

MsgBox % {A: 1, Z: 26}.Count()    ;  2
MsgBox % ["A", "B", "C"].Count()  ;  3
MsgBox % ["A",    , "C"].Count()  ;  2

SetCapacity [AHK_L 31+]

Passt die Kapazität eines Objekts oder eines seiner Felder an.

MaxElemente := Objekt.SetCapacity(MaxElemente)
ByteGröße := Objekt.SetCapacity(Schlüssel, ByteGröße)

Parameter

MaxElemente

Die maximale Anzahl von Schlüssel-Wert-Paaren, die das Objekt enthalten kann, bevor es automatisch erweitert werden muss. Wenn diese Anzahl kleiner als die aktuelle Anzahl von Schlüssel-Wert-Paaren ist, wird stattdessen dieser Wert verwendet und ungenutzter Speicher freigegeben.

Schlüssel

Ein gültiger Schlüssel.

ByteGröße

Die neue Größe in Bytes für den Zeichenkettenpuffer des Feldes, ohne den Nullterminator. Wenn das Feld nicht existiert, wird es erstellt. Wenn ByteGröße 0 ist, wird der Pufferspeicher freigegeben, aber das leere Feld nicht entfernt. Wenn ByteGröße kleiner als die aktuelle Größe ist, werden überschüssige Daten abgeschnitten; andernfalls werden alle vorhandenen Daten beibehalten.

Rückgabewert

Diese Methode gibt bei Erfolg die neue Kapazität zurück, andernfalls eine leere Zeichenkette.

GetCapacity [AHK_L 31+]

Gibt die Kapazität eines Objekts oder eines seiner Felder zurück.

MaxElemente := Objekt.GetCapacity()
ByteGröße := Objekt.GetCapacity(Schlüssel)

Wenn das Feld nicht existiert oder keine Zeichenkette enthält, wird eine leere Zeichenkette zurückgegeben.

GetAddress [AHK_L 31+]

Gibt die aktuelle Adresse des Zeichenkettenpuffers eines Feldes zurück.

Ptr := Objekt.GetAddress(Schlüssel)

_NewEnum [AHK_L 49+]

Gibt einen neuen Enumerator zum Enumerieren von Schlüssel-Wert-Paaren eines Objekts zurück.

Enum := Objekt._NewEnum()

Diese Methode wird normalerweise nicht direkt aufgerufen, sondern über die For-Schleife.

HasKey [AHK_L 53+]

Gibt 1 (true) zurück, wenn einem Schlüssel ein Wert (auch "") innerhalb eines Objekts zugeordnet ist, andernfalls 0 (false).

HatSchlüssel := Objekt.HasKey(Schlüssel)

Clone [AHK_L 60+]

Gibt eine flache Kopie eines Objekts zurück.

Klon := Objekt.Clone()

Insert [AHK_L 31+]

Veraltet: Insert ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen InsertAt, Push, ObjRawSet oder eine einfache Zuweisung.

Fügt Schlüssel-Wert-Paare in das Objekt ein, und passt existierende Schlüssel automatisch an, wenn ein Integerschlüssel angegeben ist.

Objekt.Insert(Pos, Wert1 , Wert2, ... WertN )
Objekt.Insert(Wert)
Objekt.Insert(ZketteOderObjektSchlüssel, Wert)

Das Verhalten von Insert hängt von der Anzahl und dem Typ seiner Parameter ab:

Insert gibt 1 (true) zurück. In [v1.1.21+] wird eine Ausnahme ausgelöst, wenn eine Speicherreservierung fehlschlägt. Ältere Versionen gaben in diesem Fall eine leere Zeichenkette zurück.

Remove [AHK_L 31+]

Veraltet: Remove ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen RemoveAt, Delete oder Pop.

Entfernt Schlüssel-Wert-Paare aus einem Objekt.

Objekt.Remove(ErsterSchlüssel, LetzterSchlüssel)

Das Verhalten von Remove hängt von der Anzahl und dem Typ seiner Parameter ab:

Eigenschaften

Base

Ermittelt oder setzt das Basisobjekt eines Objekts.

Basisobjekt := Objekt.Base
Objekt.Base := Basisobjekt

Basisobjekt muss ein Objekt oder eine leere Zeichenkette sein.

Eigenschaften und Methoden, die via Basisobjekt definiert werden, sind nur während der Nutzung dieses Basisobjekts zugänglich. Eine Änderung der Basis von Objekt verändert daher auch die verfügbaren Eigenschaften und Methoden.

Siehe auch: ObjGetBase(), ObjSetBase()

Funktionen

ObjRawGet [v1.1.29+]

Ruft den Wert ab, der einem Schlüssel in einem Objekt zugeordnet ist.

Wert := ObjRawGet(Objekt, Schlüssel)

Wenn Objekt den Schlüssel nicht enthält, ist der Rückgabewert eine leere Zeichenkette. Es werden keine Metafunktionen oder Eigenschaftsfunktionen aufgerufen. Der Inhalt der Basisobjekte von Objekt wird nicht berücksichtigt, und da base selbst standardmäßig eine Eigenschaft ist (kein Schlüssel-Wert-Paar), wird es typischerweise nicht zurückgegeben.

Es wird eine Ausnahme ausgelöst, wenn Objekt vom falschen Typ ist.

ObjRawSet [v1.1.21+]

Speichert oder überschreibt ein Schlüssel-Wert-Paar in einem Objekt.

ObjRawSet(Objekt, Schlüssel, Wert)

Mit dieser Funktion können Skripte die __Set-Metafunktion und Eigenschaften umgehen. Wenn dies nicht erforderlich ist, verwenden Sie stattdessen eine normale Zuweisung. Zum Beispiel: Objekt[Schlüssel] := Wert

Da der Zweck darin besteht, Metafunktionen zu umgehen, handelt es sich hierbei nur um eine Funktion, nicht um eine Methode. Der Aufruf einer internen Methode bewirkt in der Regel, dass die __Call-Metafunktion aufgerufen wird.

Es wird eine Ausnahme ausgelöst, wenn Objekt vom falschen Typ ist.

ObjGetBase [v1.1.29+]

Gibt das Basisobjekt eines Objekts zurück.

Basisobjekt := ObjGetBase(Objekt)

Es werden keine Metafunktionen aufgerufen. Die Basis des Objekts wird sogar zurückgegeben, wenn der Schlüssel "base" im Objekt gespeichert wurde (z.B. mit ObjRawSet oder SetCapacity). Es wird eine leere Zeichenkette zurückgegeben, wenn das Objekt keine Basis hat.

Es wird eine Ausnahme ausgelöst, wenn Objekt vom falschen Typ ist.

Siehe auch: Base-Eigenschaft

ObjSetBase [v1.1.29+]

Setzt das Basisobjekt eines Objekts.

ObjSetBase(Objekt, Basisobjekt)

Es werden keine Metafunktionen aufgerufen. Die Basis des Objekts wird sogar gesetzt, wenn der Schlüssel "base" im Objekt gespeichert wurde (z.B. mit ObjRawSet oder SetCapacity). Es wird eine leere Zeichenkette zurückgegeben, wenn das Objekt keine Basis hat.

Es wird eine Ausnahme ausgelöst, wenn Objekt vom falschen Typ ist oder wenn Basisobjekt kein Objekt oder eine leere Zeichenkette ist.

Siehe auch: Base-Eigenschaft

Bemerkungen

Jede Methode hat außerdem eine äquivalente Funktion, mit der ein vom Objekt implementiertes benutzerdefiniertes Verhalten umgangen werden kann. Diese Funktionen sollten nur für diesen Zweck verwendet werden. Um eine solche Funktion aufzurufen, stellen Sie dem Methodennamen "Obj" voran und übergeben Sie das Zielobjekt als ersten Parameter. Zum Beispiel:

array := [1, 2, 3]
MsgBox % ObjMaxIndex(array) " = " array.MaxIndex()

Wenn eine solche Funktion mit einem Objekt oder Wert vom falschen Typ aufgerufen wird, gibt sie eine leere Zeichenkette zurück. Unabhängige Funktionen wie ObjRawSet lösen eine Ausnahme aus.