Object

오토핫키의 기본 객체 데이터유형은 연관 배열입니다. 그의 행위를 재단할 수 있는 특징이 있습니다. By default, all objects created by {}, [], Object() and Array() support the following methods, properties and functions.

목차

메쏘드

InsertAt [v1.1.21+]

하나 이상의 값을 선형 배열 안에 주어진 위치에 삽입합니다..

Object.InsertAt(Pos, Value1 , Value2, ... ValueN)
Pos

Value1을 삽입할 위치. 연이은 값은 Pos+1, Pos+2, 등등에 삽입됩니다.

Value1 ...

삽입할 하나 이상의 값들. 값 배열을 삽입하려면, 마지막 매개변수로 theArray*를 건네십시오.

InsertAt은 RemoveAt과 상대적입니다.

객체는 연관 배열이므로, PosValue1 값과 연관되는 정수 키입니다. 이전에 Pos 위치와 그 오른쪽에 있는 항목들은 정확하게 매개변수의 갯수만큼 오른쪽으로 이동합니다. 그 결과 몇몇 값들이 소실될 수 있습니다 (즉, 이 객체는 희소 배열입니다). 예를 들어:

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

; 성긴/할당되지 않은 원소는 보존됩니다:
x := ["A", , "C"]
x.InsertAt(2, "B")      ; =>  ["A", "B",    , "C"]

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

InsertAt은 객체의 정수 키가 선형 배열 안의 위치를 나타내는 경우에만 사용해야 합니다. 그 객체에 ID나 핸들 같이 임의의 정수 키가 담겨 있면, InsertAt은 원치 않은 부작용을 야기할 가능성이 높습니다. 예를 들어:

x := [], handleX := 0x4321, handleY := 0x1234
x.InsertAt(handleX, "A")
MsgBox % x[handleX]  ; A - okay
x.InsertAt(handleY, "B")
MsgBox % x[handleX]  ; 비어 있습니다
MsgBox % x[handleX+1]  ; 이곳이 "A"의 새 "위치"입니다.

InsertAt은 문자열이나 객체 키에 영향을 주지 않습니다. 그래서 혼합 키 유형이 담긴 객체와 안전하게 사용할 수 있습니다.

RemoveAt [v1.1.21+]

선형 배열에서 주어진 위치로부터 항목을 제거합니다.

Object.RemoveAt(Pos , Length)
Pos

제거할 값의 위치.

Length

제거할 값의 범위의 길이. Pos부터 Pos+Length-1까지의 항목이 제거됩니다. 생략하면, 하나의 항목만 제거됩니다.

만약 Length가 생략되면, Pos으로 제거된 값이 반환됩니다 (없으면 비어 있습니다). 그렇지 않으면, 반환 값은 값을 가진 항목이 제거된 개수입니다. 이것은 희소 배열의 Length와 다르지만, 언제나 0부터Length (포함) 사이입니다.

RemoveAt은 InsertAt에 상대적입니다.

Pos 오른쪽의 나머지 항목들은 왼쪽으로 Length 만큼 (또는 생략되면 1만큼) 이동합니다. 제거된 범위에서 어떤 항목들은 값이 없더라도 상관이 없습니다. 예를 들어:

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은 그 객체의 정수 키가 선형 배열에서 위치를 나타낼 경우에만 사용해야 합니다. 그 객체 안에 ID나 핸들 같이 임의의 정수키가 있다면, RemoveAt은 원하지 않는 부작용을 야기할 가능성이 높습니다. 예를 들어:

x := {0x4321: "A", 0x1234: "B"}
MsgBox % x.RemoveAt(0x1234) ; B
MsgBox % x[0x4321]          ; 비어 있습니다
MsgBox % x[0x4321-1]        ; A

RemoveAt은 문자열이나 객체 키에 영향을 미치지 않습니다. 그래서 혼합 키 유형이 담긴 객체와 안전하게 사용할 수 있습니다.

Push [v1.1.21+]

배열의 끝에 값을 추가합니다.

Object.Push( Value, Value2, ..., ValueN )
Value ...

삽입할 하나 이상의 값들. 값 배열을 삽입하려면, 마지막 매개변수로 theArray*를 건네십시오.

Returns the position of the last inserted value. 배열이 음수 지표에 원소를 가지고 있다면 음의 정수일 수 있습니다.

배열이 비어 있거 또는 오직 문자열이나 객체 키만 담겨 있다면 첫 번째 값은 위치 1에 삽입됩니다.

그렇지 않으면, 첫 번째 값은 Object.MaxIndex() + 1에 삽입됩니다. 그 위치가 음수 또는 0이라도 상관없습니다. If this is undesired and the object can contain negative keys, Object.InsertAt(Object.Length() + 1, ...) can be used instead.

Pop [v1.1.21+]

마지막 배열 원소를 제거하고 돌려줍니다.

Value := Object.Pop()

배열 원소가 없다면, 반환 값은 빈 문자열입니다. 그렇지 않으면, 다음과 동등합니다:

Value := Object.RemoveAt(Object.Length())

Delete [v1.1.21+]

키-값 쌍을 객체로부터 제거합니다.

Object.Delete(Key)
Object.Delete(FirstKey, LastKey)
Key

Any single key.

FirstKey, LastKey

유효한 범위의 정수나 문자키. FirstKey <= LastKey. 두 키 모두 유형이 같아야 합니다.

정확하게 매개변수가 하나만 있다면, 제거된 값이 반환됩니다 (없다면 비어 빈 값을 돌려줍니다). 그렇지 않으면 반환 값은 발견되거나 제거된 키의 개수입니다.

RemoveAt와 다르게, Delete는 제거하지 않은 키-값 쌍에 영향을 주지 않습니다. 예를 들어:

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

x := ["A", "B"]
MsgBox % x.Delete(1)    ; A
MsgBox % x[1]           ; 비어 있습니다

MinIndex / MaxIndex [AHK_L 31+]

Returns the lowest or highest integer key, if present.

MinIndex := Object.MinIndex()
MaxIndex := Object.MaxIndex()

If no integer keys are present, an empty string is returned.

Length [v1.1.21+]

Returns the length of a linear array.

Length := Object.Length()

This method returns the length of a linear array beginning at position 1; that is, the highest positive integer key contained by the object, or 0 if there aren't any.

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+]

Returns the number of key-value pairs present in an object.

Count := Object.Count()

예제:

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

SetCapacity [AHK_L 31+]

객체의 또는 객체 필드의 가용 능력을 조정합니다.

Object.SetCapacity(MaxItems)
Object.SetCapacity(Key, ByteSize)
MaxItems

객체가 담을 수 있는키-값 쌍의 최대 개수. 이 값을 넘어서면 자동으로 확대됩니다. 키-값 쌍의 현재 개수보다 작으면, 대신에 현재 개수가 사용되고, 사용되지 않는 공간은 모두 해제됩니다.

Key

유효한 키면 모두.

ByteSize

필드의 문자열 버퍼의 바이트 단위로 새 크기. 널 종료 문자는 제외합니다. 필드가 존재하지 않으면, 새로 생성됩니다. ByteSize가 0이면, 버퍼가 해제되지만 빈 필드는 제거되지 않습니다. ByteSize가 현재 크기보다 작으면, 초과된 데이터는 잘려 나갑니다; 그렇지 않으면 기존의 모든 데이터가 보존됩니다.

Returns the new capacity if successful, otherwise an empty string.

GetCapacity [AHK_L 31+]

객체나 객체 필드의 현재 가용 능력을 돌려줍니다.

MaxItems := Object.GetCapacity()
ByteSize := Object.GetCapacity(Key)

If the field does not exist or does not contain a string, an empty string is returned.

GetAddress [AHK_L 31+]

Returns the current address of a field's string buffer, if it has one.

Ptr := Object.GetAddress(Key)

_NewEnum [AHK_L 49+]

Returns a new enumerator to enumerate an object's key-value pairs.

Enum := Object._NewEnum()

This method is usually not called directly, but by the for-loop.

HasKey [AHK_L 53+]

Returns true if the specified key is associated with a value (even "") within an object, otherwise false.

Object.HasKey(Key)

Clone [AHK_L 60+]

Returns a shallow copy of an object.

Clone := Object.Clone()

Insert [AHK_L 31+]

비추천: Insert는 새 스크립트에 사용을 추천하지 않습니다. 대신에 InsertAt, Push, ObjRawSet 또는 그냥 단순하게 할당을 사용하십시오.

키-값 쌍을 객체에 삽입합니다. 정수 키가 주어지면 자동으로 기존의 키를 조정합니다.

Object.Insert(Pos, Value1 , Value2, ... ValueN )
Object.Insert(Value)
Object.Insert(StringOrObjectKey, Value)

Insert의 행위는 매개변수의 개수 그리고 유형에 따라 달라집니다:

Insert는 true를 돌려줍니다. [v1.1.21] 이후에서, 메모리 할당이 실패하면 예외가 던져집니다. 이전 버전에서는 그 경우 빈 문자열을 돌려주었습니다.

Remove [AHK_L 31+]

비추천: Remove는 새 스크립트에 사용을 추천하지 않습니다. 대신에 RemoveAt, Delete 또는 Pop을 사용하십시오.

키-값 쌍을 객체로부터 제거합니다.

Object.Remove(FirstKey, LastKey)

Remove의 행위는 매개변수의 개수와 유형에 따라 달라집니다:

Properties

Base

Retrieves or sets an object's base object.

BaseObject := Object.Base
Object.Base := BaseObject

BaseObject must be an object or an empty string.

Properties and methods defined by a base object are accessible only while that base object is in use. Therefore, changing Object's base also changes the set of available properties and methods.

다음 참조: ObjGetBase(), ObjSetBase()

함수

ObjRawGet [v1.1.29+]

Retrieves the value associated with a given key within an object.

Value := ObjRawGet(Object, Key)

If Object does not contain Key, the return value is an empty string. No meta-functions or property functions are called. The content of Object's base objects are not considered, and since base itself is a property and not a key-value pair by default, it is typically not returned.

An exception is thrown if Object is of an incorrect type.

ObjRawSet [v1.1.21+]

Stores or overwrites a key-value pair in an object.

ObjRawSet(Object, Key, Value)

This function is provided to allow scripts to bypass the __Set meta-function and properties. 필요하지 않으면, 대신에 정상적인 할당을 사용해야 합니다. 예를 들어: Object[Key] := Value

메타-함수를 우회하는 것이 목적이므로, 메쏘드가 아니라 함수입니다. 내장 메쏘드를 호출하면 일반적으로 __Call meta-함수가 호출됩니다.

An exception is thrown if Object is of an incorrect type.

ObjGetBase [v1.1.29+]

Returns an object's base object.

BaseObject := ObjGetBase(Object)

No meta-functions are called. The object's base is returned even if the key "base" has been stored in the object (such as with ObjRawSet or SetCapacity). An empty string is returned if the object has no base.

An exception is thrown if Object is of an incorrect type.

다음 참조: Base property

ObjSetBase [v1.1.29+]

Sets an object's base object.

ObjSetBase(Object, BaseObject)

No meta-functions are called. The object's base is set even if the key "base" has been stored in the object (such as with ObjRawSet or SetCapacity). An empty string is returned if the object has no base.

An exception is thrown if Object is of an incorrect type or if BaseObject is not an object or empty string.

다음 참조: Base property

논평

각 메쏘드 마다 동등한 함수가 있습니다. 이 함수를 사용하면 다른 객체가 구현한 맞춤 행위를 우회할 수 있습니다 -- 이 함수들은 꼭 우회의 목적으로만 사용하시기를 권장합니다. 호출하려면, 메쏘드 이름 앞에 "Obj"를 붙인 다음 목표 객체를 첫 번째 매개변수로 건네십시오. 예를 들어:

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

If an Obj method-function is called with an object or value of the wrong type, it returns an empty string. Standalone functions such as ObjRawSet throw an exception.