객체

오토핫키의 기본 객체 데이터유형은 연관 배열입니다. 그의 행위를 재단할 수 있는 특징이 있습니다. 기본값으로, {}, [], Object() 그리고 Array()가 생성한 모든 객체는 다음 메쏘드를 지원합니다:

비추천 (사용을 권장하지 않습니다):

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

array := [1, 2, 3]
MsgBox % ObjMaxIndex(array) " = " array.MaxIndex()
선택 | 내려받기

Obj 함수가 잘못된 유형의 객체 또는 값으로 호출되면, 빈 문자열을 돌려줍니다.

 

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]  ; 이곳이 "B"의 새 "위치"입니다.

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*를 건네십시오.

반환 값

가장 마지막으로 삽입된 값의 위치, 배열이 음수 지표에 원소를 가지고 있다면 음의 정수일 수 있습니다.

논평

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

그렇지 않으면, 첫 번째 값은 Object.MaxIndex() + 1에 삽입됩니다. 그 위치가 음수 또는 0이라도 상관없습니다. 이 위치가 마음에 안들고 객체에 음수 키가 들어 있을 수 있다면, 대신에 Object.InsertAt(Object.Length() + 1, ...)를 사용할 수 있습니다.

Pop [v1.1.21+]

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

Value := Object.Pop()

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

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

Delete [v1.1.21+]

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

Object.Delete(Key)
Object.Delete(FirstKey, LastKey)
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 [v1.0.90+]

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

정수 키가 존재하면, MinIndex는 가장 낮은 값을 돌려주고 MaxIndex는 가장 높은 값을 돌려줍니다. 그렇지 않으면 빈 문자열을 돌려줍니다.

Length [v1.1.21+]

Length := Object.Length()

위치 1에서 시작하여 선형 배열의 길이를 돌려줍니다; 즉, 객체 안에서 가장 높은 양의 정수 키를 돌려주고, 그게 없다면 0을 돌려줍니다.

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

SetCapacity [v1.0.90+]

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

Object.SetCapacity(MaxItems)
Object.SetCapacity(Key, ByteSize)
MaxItems객체가 담을 수 있는키-값 쌍의 최대 개수. 이 값을 넘어서면 자동으로 확대됩니다. 키-값 쌍의 현재 개수보다 작으면, 대신에 현재 개수가 사용되고, 사용되지 않는 공간은 모두 해제됩니다.
Key유효한 키면 모두.
ByteSize필드의 문자열 버퍼의 바이트 단위로 새 크기. 널 종료 문자는 제외합니다. 필드가 존재하지 않으면, 새로 생성됩니다. ByteSize가 0이면, 버퍼가 해제되지만 빈 필드는 제거되지 않습니다. ByteSize가 현재 크기보다 작으면, 초과된 데이터는 잘려 나갑니다; 그렇지 않으면 기존의 모든 데이터가 보존됩니다.
Returns성공하면 새 가용 능력, 그렇지 않으면 빈 문자열을 돌려줍니다.

GetCapacity [v1.0.90+]

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

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

GetAddress [v1.0.90+]

Ptr := Object.GetAddress(Key)

있다면, 필드의 문자열 버퍼의 현재 주소를 돌려줍니다.

NewEnum [v1.0.90+]

Enum := Object._NewEnum()

새 열거자(enumerator)를 돌려주어 이 객체의 키-값 쌍을 열거합니다. 이 메쏘드는 보통 직접 호출되지 않고, for-회돌이 안에서 사용됩니다.

HasKey [v1.0.90+]

Object.HasKey(Key)

KeyObject 안의 값 (even "")에 연관되어 있으면 참을, 그렇지 않으면 거짓을 돌려줍니다.

Clone [v1.0.90+]

Clone := Object.Clone()

객체의 얕은 사본을 돌려줍니다.

ObjRawSet

키-값 쌍을 객체에 저장하거나 덮어씁니다.

ObjRawSet(Object, Key, Value)

이 함수로 스크립트는 __Set 메타-함수를 우회할 수 있습니다. 필요하지 않으면, 대신에 정상적인 할당을 사용해야 합니다. 예를 들어: Object[Key] := Value

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

Insert [v1.0.90+]

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

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

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

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

  • 매개변수가 여러 개이고 첫 매개변수가 정수이면, Insert는 InsertAt처럼 행위합니다.
  • 매개변수가 여러 개이고 첫 매개변수가 정수가 아니면, Insert는 ObjRawSet처럼 행위합니다.
  • 매개변수가 하나만 있으면, Insert는 Push처럼 행위합니다.

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

Remove [v1.0.90+]

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

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

Object.Remove(FirstKey, LastKey)

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

  • Object.Remove(Integer)Object.RemoveAt(Integer)처럼 행위합니다.
  • Object.Remove(Integer, "")Object.Delete(Integer)처럼 행위합니다.
  • Object.Remove(Integer1, Integer2)Object.RemoveAt(Integer1, Integer2 - Integer1 + 1)처럼 행위합니다.
  • Object.Remove()Object.Pop()처럼 행위합니다.
  • 다른 모든 매개변수 조합은 Delete처럼 행위합니다.