¿ÀÅäÇÖÅ°¿¡¼ °´Ã¼(object)´Â Ãß»ó µ¥ÀÌÅÍ À¯ÇüÀ¸·Î¼ ¼¼ °¡Áö ±âº» ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù:
°´Ã¼ ÂüÁ¶´Â ƯÁ¤ °´Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ ¶Ç´Â ÇÚµé("handle")ÀÔ´Ï´Ù. ¹®ÀÚ¿°ú ¼ýÀÚó·³, °´Ã¼ ÂüÁ¶´Â º¯¼ö¿¡ ÀúÀåÇÏ°í ÇÔ¼ö·ÎºÎÅÍ ¹ÝȯÇÏ¸ç °´Ã¼ ¾È¿¡ ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. x := y
ó·³ ÂüÁ¶¸¦ ÇÑ º¯¼ö¿¡¼ ´Ù¸¥ º¯¼ö·Î º¹»çÇÏ°í ³ª¸é, µÎ º¯¼ö ¸ðµÎ °°Àº °´Ã¼¸¦ °¡¸®Åµ´Ï´Ù.
IsObject¸¦ »ç¿ëÇÏ¸é °ªÀÌ °´Ã¼ÀÎÁö ÆǺ°ÇÒ ¼ö ÀÖ½À´Ï´Ù:
Result := IsObject(expression)
°´Ã¼ÀÇ Á¾·ù´Â ´ÙÀ½°ú °°½À´Ï´Ù:
¹è¿À» ¸¸µì´Ï´Ù:
Array := [Item1, Item2, ..., ItemN] Array := Array(Item1, Item2, ..., ItemN)
Ç׸ñÀ» ¿¶÷ÇÕ´Ï´Ù:
Value := Array[Index]
Ç׸ñÀ» ÇÒ´çÇÕ´Ï´Ù:
Array[Index] := Value
ÁÖ¾îÁø À妽º¿¡ Ç׸ñ(µé)À» »ðÀÔÇÕ´Ï´Ù:
Array.InsertAt(Index, Value, Value2, ...)
Ç׸ñ(µé)À» Ãß°¡ÇÕ´Ï´Ù:
Array.Push(Value, Value2, ...)
Ç׸ñÀ» Á¦°ÅÇÕ´Ï´Ù:
RemovedValue := Array.RemoveAt(Index)
¸¶Áö¸· Ç׸ñÀ» Á¦°ÅÇÕ´Ï´Ù:
RemovedValue := Array.Pop()
¹è¿ÀÌ ºñ¾î ÀÖÁö ¾ÊÀ¸¸é, MinIndex¿Í MaxIndex/Length´Â ¹è¿¿¡¼ ÇöÀç »ç¿ëÁßÀÎ °¡Àå ³·Àº À妽º¿Í °¡Àå ³ôÀº À妽º¸¦ µ¹·ÁÁÝ´Ï´Ù. °¡Àå ³·Àº À妽º´Â °ÅÀÇ ´ëºÎºÐ 1À̹ǷÎ, MaxIndex´Â º¸Åë Ç׸ñÀÇ °³¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù. ±×·¸Áö¸¸, Á¤¼ö Å°°¡ ¾ø´Ù¸é, MaxIndex´Â ºó ¹®ÀÚ¿À» µ¹·ÁÁÝ´Ï´Ù. ¹Ý¸é¿¡ Length´Â 0À» µ¹·ÁÁÝ´Ï´Ù. ¹è¿ÀÇ ³»¿ëÀº À妽º ¶Ç´Â For-loop·Î ȸµ¹ÀÌÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î:
array := ["one", "two", "three"] ; 1ºÎÅÍ ¹è¿ÀÇ ³¡±îÁö ¹Ýº¹ÇÕ´Ï´Ù: Loop % array.Length() MsgBox % array[A_Index] ; ¹è¿ÀÇ ³»¿ëÀ» ¿°ÅÇÕ´Ï´Ù: For index, value in array MsgBox % "Item " index " is '" value "'"
¿¬°ü ¹è¿Àº À¯ÀÏÇÑ Å° Áý´Ü°ú À¯ÀÏÇÑ °ª Áý´ÜÀ» Æ÷ÇÔÇÏ´Â °´Ã¼ÀÔ´Ï´Ù. °¢ Å°´Â °¢ °ª¿¡ ¿¬°üµÇ¾î ÀÖ½À´Ï´Ù. Å°´Â ¹®ÀÚ¿À̳ª Á¤¼ö¶Ç´Â °´Ã¼°¡ µÉ ¼ö ÀÖ´Â ¹Ý¸é, °ªÀº ¾î¶² À¯Çüµµ µÉ ¼ö ÀÖ½À´Ï´Ù. ¿¬°ü ¹è¿À» ´ÙÀ½°ú °°ÀÌ ¸¸µé ¼ö ÀÖ½À´Ï´Ù:
Array := {KeyA: ValueA, KeyB: ValueB, ..., KeyZ: ValueZ} Array := Object("KeyA", ValueA, "KeyB", ValueB, ..., "KeyZ", ValueZ)
{key:value}
Ç¥±â¹ýÀ» »ç¿ëÇϸé, ¿ÀÁ÷ ´Ü¾î ¹®Àڷθ¸ ±¸¼ºµÈ Å°¿¡´Â ÀοëºÎÈ£¸¦ »ý·«Çصµ µË´Ï´Ù. ¾î¶² Ç¥Çö½Äµµ Å°·Î »ç¿ëÇÒ ¼ö´Â ÀÖÁö¸¸, º¯¼ö¸¦ Å°·Î »ç¿ëÇÏ·Á¸é, ¹Ýµå½Ã °ýÈ£·Î µÑ·¯½Î¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, {(KeyVar): Value}
°ú {GetKey(): Value}
´Â ¸ðµÎ À¯È¿ÇÕ´Ï´Ù.
Ç׸ñÀ» ¿¶÷ÇÕ´Ï´Ù:
Value := Array[Key]
Ç׸ñÀ» ÇÒ´çÇÕ´Ï´Ù:
Array[Key] := Value
Ç׸ñÀ» Á¦°ÅÇÕ´Ï´Ù:
RemovedValue := Array.Delete(Key)
Ç׸ñÀ» ¿°ÅÇÕ´Ï´Ù:
array := {ten: 10, twenty: 20, thirty: 30} For key, value in array MsgBox %key% = %value%
¿¬°ü ¹è¿Àº Áß°£ Áß°£ ºñ¿ö¼ ¸¸µé ¼ö ÀÖ½À´Ï´Ù - Áï, {1:"a",1000:"b"}
´Â ¿ÀÁ÷ µÎ °³ÀÇ Å°-°ª ½Ö¸¸ µé¾î ÀÖ½À´Ï´Ù. 1000°³°¡ ¾Æ´Õ´Ï´Ù.
AutoHotkey v1.x¿¡¼ ´Ü¼ø ¹è¿°ú ¿¬°ü ¹è¿Àº °°Àº °ÍÀÔ´Ï´Ù. ±×·¸Áö¸¸ []
¸¦ ´Ü¼ø ¹è¿·Î °£ÁÖÇÏ´Â °ÍÀÌ ±×ÀÇ ¸ñÀûÀ» ¸íÈ®ÇÏ°Ô º¸¿©ÁÖ´Â µ¥ µµ¿òÀÌ µÇ°í, ¹Ì·¡ ¹öÀüÀÇ ¿ÀÅäÇÖÅ°¿¡ ½ºÅ©¸³Æ®°¡ ÀÛµ¿ÇÒ °¡´É¼ºÀ» ³ô¿©ÁÝ´Ï´Ù. ¾ÕÀ¸·Î´Â ´Ü¼ø ¹è¿°ú ¿¬°ü ¹è¿ »çÀÌ¿¡ Â÷ÀÌ°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.
Ư¼ºÀ» ¿¶÷ÇÕ´Ï´Ù:
Value := Object.Property
Ư¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù:
Object.Property := Value
¸Þ½îµå¸¦ È£ÃâÇÕ´Ï´Ù:
ReturnValue := Object.Method(Parameters)
°è»êÇÑ ¸Þ½îµå À̸§À¸·Î ¸Þ½îµå¸¦ È£ÃâÇÕ´Ï´Ù:
ReturnValue := Object[MethodName](Parameters)
COM °´Ã¼ÀÇ Æ¯¼º°ú »ç¿ëÀÚ-Á¤ÀÇ °´Ã¼´Â ¸Å°³º¯¼ö¸¦ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù:
Value := Object.Property[Parameters] Object.Property[Parameters] := Value
°ü·Ã Ç׸ñ: Object, File Object, Func Object, COM object
¾Ë·ÁÁø ÇÑ°è:
x.y[z]()
´Â x["y", z]()
À¸·Î °£ÁֵǴµ¥, ÀÌ´Â Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. Àӽà ÇØ°áÃ¥À¸·Î, (x.y)[z]()
´Â ¸ÕÀú x.y
¸¦ Æò°¡ÇÑ ´ÙÀ½, ±× °á°ú¸¦ ¸Þ½îµå È£ÃâÀÇ ¸ñÇ¥·Î »ç¿ëÇÕ´Ï´Ù. x.y[z].Call()
¿¡´Â ÀÌ ÇÑ°è°¡ ¾ø´Ù´Â °ÍÀ» ÁÖ¸ñÇϽʽÿÀ. ¿Ö³ÄÇϸé (x.y[z]).Call()
°ú ¶È°°ÀÌ Æò°¡µÇ±â ¶§¹®ÀÔ´Ï´Ù.½ºÅ©¸³Æ®´Â ¸í½ÃÀûÀ¸·Î °´Ã¼¸¦ Ç®¾îÁÖÁö ¾Ê½À´Ï´Ù. °´Ã¼¸¦ °¡¸®Å°´Â ¸¶Áö¸· ÂüÁ¶°¡ »ç¶óÁö¸é, ±× °´Ã¼´Â ÀÚµ¿À¸·Î ÇØÁ¦µË´Ï´Ù. º¯¼ö¿¡ ÀúÀåµÈ ÂüÁ¶´Â ±× º¯¼ö°¡ ´Ù¸¥ °ª¿¡ ÇÒ´çµÇ¸é ÀÚµ¿À¸·Î ÇØÁ¦µË´Ï´Ù. ¿¹¸¦ µé¾î:
obj := {} ; °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. obj := "" ; ¸¶Áö¸· ÂüÁ¶¸¦ ÇØÁ¦ÇÕ´Ï´Ù. ±×·¯¹Ç·Î °´Ã¼°¡ ÇعæµË´Ï´Ù.
ºñ½ÁÇÏ°Ô, ¶Ç´Ù¸¥ °´Ã¼ÀÇ Çʵ忡 ÀúÀåµÈ ÂüÁ¶Á¡Àº ±× Çʵ尡 ¶Ç´Ù¸¥ °ª¿¡ ÇÒ´çµÇ°Å³ª ±× °´Ã¼·ÎºÎÅÍ Á¦°ÅµÉ ¶§ ÀÚµ¿À¸·Î Ç®¾îÁý´Ï´Ù. ÀÌ°ÍÀº ¹è¿¿¡µµ Àû¿ëµË´Ï´Ù. ¹è¿Àº ½ÇÁ¦·Î °´Ã¼ÀÔ´Ï´Ù.
arr := [{}] ; °´Ã¼¸¦ ´ã°í ÀÖ´Â ¹è¿À» »ý¼ºÇÕ´Ï´Ù. arr[1] := {} ; µÎ ¹ø° °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. ¹¬½ÃÀûÀ¸·Î ù °´Ã¼¸¦ Ç®¾îÁÖ°í ÀÖ½À´Ï´Ù. arr.Remove(1) ; µÎ ¹ø° °´Ã¼¸¦ Á¦°ÅÇÏ°í Ç®¾îÁÝ´Ï´Ù.
ÇÑ °´Ã¼¸¦ °¡¸®Å°´Â ¸ðµç ÂüÁ¶°¡ ÇØÁ¦µÇ¾î¾ß ºñ·Î¼ ±× °´Ã¼°¡ ÇعæµÉ ¼ö ÀÖ½À´Ï´Ù. ±×·¡¼ ¼øȯ ÂüÁ¶°¡ ÀÖ´Â °´Ã¼´Â ÀÚµ¿À¸·Î Ç®¾îÁöÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é, x.child
°¡ y
¸¦ °¡¸®Å°°í y.parent
°¡ x
¸¦ °¡¸®Å²´Ù¸é, x
¿Í y
¸¦ ¼Ò°ÅÇÏ´Â °Í¸¸À¸·Î´Â ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ºÎ¸ð °´Ã¼¿¡ ¿©ÀüÈ÷ ÀÚ¼ÕÀ» °¡¸®Å°´Â ÂüÁ¶°¡ µé¾îÀÖ°í ±× ¹Ý´ëµµ ¸¶Âù°¡ÁöÀ̱⠶§¹®ÀÔ´Ï´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é, ¼øȯ ÂüÁ¶¸¦ Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù.
x := {}, y := {} ; °´Ã¼¸¦ µÎ °³ »ý¼ºÇÕ´Ï´Ù. x.child := y, y.parent := x ; ¼øȯ ÂüÁ¶¸¦ »ý¼ºÇÕ´Ï´Ù. y.parent := "" ; ¼øȯ ÂüÁ¶¸¦ ¸ÕÀú Á¦°ÅÇØ¾ß °´Ã¼°¡ ÇعæµÉ ¼ö ÀÖ½À´Ï´Ù. x := "", y := "" ; À§ÀÇ ÁÙÀÌ ¾ø´Ù¸é, ÀÌ Áٷδ °´Ã¼¸¦ Ç®¾îÁÙ ¼ö ¾ø½À´Ï´Ù.
´õ ÀÚ¼¼ÇÑ ³»¿ë°ú °í±Þ »ç¿ë¹ýÀº ÂüÁ¶ Ƚ¼ö ¼¼±â¸¦ º¸½Ê½Ã¿À.
¸ðµç À¯ÇüÀÇ °´Ã¼´Â ¹è¿ ±¸¹®(°¢°ýÈ£)°ú °´Ã¼ ±¸¹® (Á¡)À» Áö¿øÇÕ´Ï´Ù.
°Ô´Ù°¡, °´Ã¼ ÂüÁ¶´Â Ç¥Çö½Ä¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:
= == != <>
ÁßÀÇ Çϳª¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ °ª°ú ºñ±³ÇÒ ¶§, µÎ °ª ¸ðµÎ °°Àº °´Ã¼¸¦ °¡¸®Å°´Â ÂüÁ¶Á¡ÀÏ °æ¿ì¿¡¸¸ °°´Ù°í °£Áֵ˴ϴÙ.if obj
, !obj
¶Ç´Â obj ? x : y
¿¡¼¿Í °°ÀÌ ºÒ¸®¾ð °ªÀÌ ¿ä±¸µÉ ¶§, °´Ã¼´Â ¾ðÁ¦³ª Âü(true)À¸·Î °£Áֵ˴ϴÙ.&
ÁÖ¼Ò ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ¿¶÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. »ý¼º ½ÃÁ¡ºÎÅÍ ¸¶Áö¸· ÂüÁ¶°¡ ÇØÁ¦µÉ ¶§±îÁö ±× °´Ã¼¸¦ À¯ÀÏÇÏ°Ô ½Äº°ÇÕ´Ï´Ù.°´Ã¼°¡ ¿¹»óÄ¡ ¸øÇÑ ¹®¸Æ¿¡¼ »ç¿ëÁßÀ̸é, ±× °´Ã¼´Â ºó ¹®ÀÚ¿·Î Ãë±ÞµË´Ï´Ù. ¿¹¸¦ µé¾î, MsgBox %object%
´Â ºó MsgBox¸¦ º¸¿©ÁÖ°í object + 1
´Â ºó ¹®ÀÚ¿À» »êÃâÇÕ´Ï´Ù. ÀÌ ÇàÀ§´Â ¹Ù²ð ¼ö ÀÖÀ¸¹Ç·Î ¿©±â¿¡ ÀÇÁ¸ÇÏ¸é ¾È µË´Ï´Ù.
¸Þ½îµå-È£Ãâ ´ÙÀ½¿¡ °ð¹Ù·Î ÇÒ´ç ¿¬»êÀÚ°¡ ¿À¸é, ¸Å°³º¯¼ö·Î Ư¼ºÀ» ÇÒ´çÇÏ´Â °Í°ú µ¿µîÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº ¼·Î µ¿µîÇÕ´Ï´Ù:
obj.item(x) := y obj.item[x] := y
x.y += 1
¿Í --arr[1]
°°Àº º¹ÇÕ ¼¼ú¹®À» Áö¿øÇÕ´Ï´Ù.
[v1.1.20+]: Ư¼ºÀ» ¼³Á¤Çϰųª ȹµæÇÒ ¶§ ¸Å°³º¯¼ö¸¦ »ý·«ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, x[,2]
. ½ºÅ©¸³Æ®´Â À̸¦ ÀÌ¿ëÇÏ¿© Ư¼º°ú ¸ÞŸ-ÇÔ¼öÀÇ ¸Å°³º¯¼ö¿¡ ±âº» °ªµéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸Þ½îµå À̸§µµ x[](a)
ó·³ ¿ÏÀüÈ÷ »ý·« °¡´ÉÇÕ´Ï´Ù. ½ºÅ©¸³Æ®´Â À̸¦ ÀÌ¿ëÇÏ¿© __Call ¸ÞŸ-ÇÔ¼öÀÇ ¸Å°³º¯¼ö¿¡ ±âº» °ªÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ±×·¸Áö ¾ÊÀ¸¸é °ªÀÌ Á¦°øµÇÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.
ÀÌ°ÍÀº x.(a)
¿Í ´Ù¸£¸ç, x[""](a)
°ú µ¿µîÇÑ °Í¿¡ ÁÖ¸ñÇϽʽÿÀ. COM °´Ã¼¸¦ È£ÃâÇÒ ¶§ Ư¼ºÀ̳ª ¸Þ½îµå À̸§ÀÌ »ý·«µÇ¸é, ±×ÀÇ "±âº» ¸â¹ö"°¡ È£ÃâµË´Ï´Ù.
[]
, {}
¶Ç´Â new
¿¬»êÀÚ·Î »ý¼ºµÈ °´Ã¼¿¡ ¾î´À °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö´Â ¾à°£ Á¦ÇÑÀÌ ÀÖ½À´Ï´Ù :
x[0x10]
, x[16]
±×¸®°í x[00016]
´Â µ¿µîÇÕ´Ï´Ù. ÀÌ°ÍÀº ¶Ç ½ÊÁø ¼Ò¼öÁ¡ÀÌ ¾ø´Â ¼ýÄ¡ ¹®ÀÚ¿¿¡µµ Àû¿ëµË´Ï´Ù.x[1]
°úx["1"]
´Â µ¿µîÇÏÁö ¾Ê½À´Ï´Ù. °Ô´Ù°¡, ÀοëºÎÈ£ ºÙÀº ±âÈ£ ¹®ÀÚ¿Àº ( "0x" x
¿¡¼ ó·³) ¶Ç´Ù¸¥ °ª°ú °áÇÕÇÕ´Ï´Ù. ±× °á°ú´Â ¼ø¼öÇÏ°Ô ºñ-¼ýÀÚ·Î Ãë±ÞµË´Ï´Ù. ±×·¸Áö¸¸, ÀÌ°ÍÀº º¯¼ö¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ±×·¡¼ x[1]
¿Í x[y:="1"]
´Â µ¿µîÇÕ´Ï´Ù. ÀÌ ¹®Á¦´Â v2¿¡¼ ÇØ°áµÉ °ÍÀÔ´Ï´Ù. ±×·¡¼ ½ºÅ©¸³Æ®´Â ÀοëºÎÈ£ ºÙÀº ¼ýÄ¡ ±âÈ£¸¦ Å°·Î »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇØ¾ß ÇÕ´Ï´Ù.0+1.0
³ª Sqrt(y)
ÀÇ °á°ú °°ÀÌ) ¼ø¼öÇÑ ºÎµ¿ ¼Ò¼öÁ¡ ¼ö´Â °Á¦·Î ÇöÀçÀÇ ºÎµ¿ ¼Ò¼öÁ¡ ¼ö Çü½ÄÀ¸·Î º¯È¯µË´Ï´Ù. ÀÏ°ü¼º°ú ¸í·áÇÔÀ» À§ÇÏ¿©, ½ºÅ©¸³Æ®´Â ºÎµ¿ ¼Ò¼öÁ¡ ±âÈ£¸¦ Å°·Î »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÕ´Ï´Ù.
º¯¼ö func¿¡ ÇÔ¼ö À̸§ÀÌ µé¾î ÀÖ´Ù¸é, ±× ÇÔ¼ö´Â µÎ °¡Áö ¹æ¹ýÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù: %func%()
¶Ç´Â func.()
. ±×·¸Áö¸¸, ÀÌ·¸°Ô ÇÏ·Á¸é ¸Å¹ø ÇÔ¼ö À̸§À» °áÁ¤ÇØ¾ß Çϴµ¥, ÇÔ¼ö°¡ ¿©·¯¹ø È£ÃâµÈ´Ù¸é È¿À²ÀûÀÌÁö ¸øÇÕ´Ï´Ù. ¼öÇ༺´ÉÀ» °³¼±Çϱâ À§ÇØ, ½ºÅ©¸³Æ®´Â ÇÔ¼ö¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¿¶÷ÇØ ±×°ÍÀ» ÀúÀåÇØ ³ªÁß¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:
Func := Func("MyFunc")
ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ±¸¹®À» »ç¿ëÇÏ¿© ÂüÁ¶·Î È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù:
RetVal := %Func%(Params) ; v1.1.07+À» ¿ä±¸ÇÕ´Ï´Ù RetVal := Func.Call(Params) ; v1.1.19+À» ¿ä±¸ÇÕ´Ï´Ù RetVal := Func.(Params) ; ±ÇÀåÇÏÁö ¾Ê½À´Ï´Ù
ÇÔ¼ö ÂüÁ¶ÀÇ Ãß°¡ Ư¼ºµé¿¡ °üÇÑ Á¤º¸´Â Func Object¸¦ ÂüÁ¶ÇϽʽÿÀ.
¿ÀÅäÇÖÅ°´Â "´Ù-Â÷¿ø" ¹è¿À» Áö¿øÇÕ´Ï´Ù. ´Ù¸¥ ¹è¿ ¾È¿¡ ¹è¿À» Åõ¸íÇÏ°Ô ÀúÀåÇÏ¸é µË´Ï´Ù. ¿¹¸¦ µé¾î, Å×À̺íÀº ÇàÀÇ ¹è¿·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ý¸é¿¡ °¢ Çà ÀÚü´Â ¿ÀÇ ¹è¿ÀÔ´Ï´Ù. ±× °æ¿ì, x
Çà y
¿ÀÇ ³»¿ëÀº ¾Æ·¡ÀÇ ¹æ¹ýÁß Çϳª¸¦ »ç¿ëÇÏ¿© ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù:
table[x][y] := content ; A table[x, y] := content ; B
table[x]
°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é, A¿Í B´Â µÎ °¡Áö Á¡¿¡¼ ´Ù¸¨´Ï´Ù:
table[x]
¾È¿¡ ÀúÀåÇÕ´Ï´Ù.table
ÀÇ base´Â ¸ÞŸ-ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ È£ÃâÇÕ´Ï´Ù:
table.base.__Get(table, x)[y] := content ; A
table.base.__Set(table, x, y, content) ; B
°á°úÀûÀ¸·Î, B´Â °´Ã¼°¡ ÀüüÀûÀÎ ÇÒ´ç¿¡ ´ëÇÏ¿© ¸ÂÃã ÇàÀ§¸¦ Á¤ÀÇÇϵµ·Ï Çã¿ëÇÕ´Ï´Ù.table[a, b, c, d] := value
¿Í °°Àº ´Ù-Â÷¿ø ÇÒ´çÀº ´ÙÀ½°ú °°ÀÌ Ã³¸®µË´Ï´Ù:
´ÙÀ½ ÇàÀ§´Â ¿ÀÁ÷ ½ºÅ©¸³Æ®·Î-¸¸µç °´Ã¼¿¡¸¸ Àû¿ëµË´Ï´Ù. Á» ´õ Àü¹®ÈµÈ À¯ÇüÀÇ °´Ã¼, COM °´Ã¼³ª COM ¹è¿Àº Àû¿ëµÇÁö ¾Ê½À´Ï´Ù.
ÇÔ¼ö ¹è¿Àº ´Ü¼øÈ÷ ÇÔ¼ö À̸§À̳ª ÂüÁ¶¸¦ ´ã°í ÀÖ´Â ¹è¿ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î:
array := [Func("FirstFunc"), Func("SecondFunc")] ; °¢ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù, "foo"¸¦ ¸Å°³º¯¼ö·Î °Ç³Ù´Ù: Loop 2 array[A_Index].("foo") ; °¢ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¹¬½ÃÀûÀ¸·Î ¹è¿ ÀÚü¸¦ ¸Å°³º¯¼ö·Î °Ç³Ù´Ù: Loop 2 array[A_Index]() FirstFunc(param) { MsgBox % A_ThisFunc ": " (IsObject(param) ? "object" : param) } SecondFunc(param) { MsgBox % A_ThisFunc ": " (IsObject(param) ? "object" : param) }
ÇÏÀ§-ȣȯÀ» À§ÇØ, array[A_Index]
¿¡ ÇÔ¼ö ÂüÁ¶°¡ ¾Æ´Ï¶ó ÇÔ¼ö À̸§ÀÌ µé¾î ÀÖ´Ù¸é, µÎ ¹ø° ÇüÅ´ ¹è¿(array)À» ¸Å°³º¯¼ö·Î °Ç³×Áö ¾Ê½À´Ï´Ù. ±×·¸Áö¸¸, array[A_Index]
°¡ array.base[A_Index]
À¸·ÎºÎÅÍ »ó¼ÓµÇ¾ú´Ù¸é, ¹è¿(array)ÀÌ ¸Å°³º¯¼ö·Î °Ç³×Áý´Ï´Ù.
½ºÅ©¸³Æ®·Î ¸¸µç °´Ã¼´Â ¹Ì¸® Á¤ÀÇµÈ ±¸Á¶¸¦ °¡Áú ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ´ë½Å¿¡, °¢ °´Ã¼´Â Ư¼º°ú ¸Þ½îµå¸¦ ±×ÀÇ base
°´Ã¼·ÎºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÕ´Ï´Ù (±×·¸Áö ¾ÊÀ¸¸é "ÇÁ·ÎÅäŸÀÔ" ¶Ç´Â "class"¶ó°í ¾Ë·ÁÁø). Ư¼º°ú ¸Þ½îµå´Â ¾ðÁ¦µçÁö °´Ã¼¿¡ Ãß°¡ÇÒ ¼öµµ (Á¦°ÅÇÒ ¼öµµ) ÀÖ½À´Ï´Ù. ÀÌ·± º¯°æÀº À̷κÎÅÍ ÆÄ»ýµÈ ¸ðµç °´Ã¼¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù. º¸´Ù º¹ÀâÇÏ°í ÀüÈµÈ »óȲÀ» À§ÇØ, º£À̽º °´Ã¼´Â ÀÚ½ÅÀ» »ó¼Ó¹ÞÀº °´Ã¼µéÀÇ Ç¥ÁØ ÇàÀ§¸¦ ¿À¹ö¶óÀ̵å ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ÞŸ-ÇÔ¼ö¸¦ Á¤ÀÇÇØ ¿À¹ö¶óÀ̵å ÇÕ´Ï´Ù.
Base °´Ã¼´Â ±×³É Æò¹üÇÑ °´Ã¼À̸ç, ÀüÇüÀûÀ¸·Î µÎ °¡Áö ¹æ½ÄÀ¸·Î »ý¼ºµË´Ï´Ù:
class baseObject { static foo := "bar" } ; ¶Ç´Â baseObject := {foo: "bar"}
°´Ã¼¸¦ ¶Ç´Ù¸¥ °´Ã¼·ÎºÎÅÍ ÆÄ»ý½ÃÄÑ »ý¼ºÇϱâ À§ÇØ, ½ºÅ©¸³Æ®´Â base
Ư¼º¿¡ ÇÒ´çÇϰųª new
Å°¿öµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:
obj1 := Object(), obj1.base := baseObject obj2 := {base: baseObject} obj3 := new baseObject MsgBox % obj1.foo " " obj2.foo " " obj3.foo
¾ðÁ¦µçÁö ÇÑ °´Ã¼ÀÇ base
¸¦ ÀçÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù. °´Ã¼°¡ »ó¼Ó¹ÞÀº ¸ðµç Ư¼º°ú ¸Þ½îµå¸¦ È¿°úÀûÀ¸·Î ±³Ã¼ÇÕ´Ï´Ù.
ÇÁ·ÎÅäŸÀÔ ¶Ç´Â base
°´Ã¼´Â ´Ù¸¥ °´Ã¼¿Í ¸¶Âù°¡Áö·Î ±¸¼ºÇÏ°í Á¶ÀÛÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Ư¼º Çϳª¿Í ¸Þ½îµå Çϳª¸¦ °¡Áø Æò¹üÇÑ °´Ã¼´Â ´ÙÀ½°ú °°ÀÌ ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù:
; °´Ã¼¸¦ »ý¼ºÇÑ´Ù. thing := {} ; Store a value. thing.foo := "bar" ; ÇÔ¼ö ÂüÁ¶¸¦ ÀúÀåÇÔÀ¸·Î½á ¸Þ½îµå¸¦ »ý¼ºÇÑ´Ù. thing.test := Func("thing_test") ; ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. thing.test() thing_test(this) { MsgBox % this.foo }
thing.test()
°¡ È£ÃâµÇ¸é, thing´Â ÀÚµ¿À¸·Î ¸Å°³º¯¼ö ¸®½ºÆ®ÀÇ Ã¹¹ø°·Î »ðÀԵ˴ϴÙ. ±×·¸Áö¸¸, ÇÏÀ§ ȣȯÀ» À§ÇØ, ÀÌ·± ÀÏÀº ÇÔ¼ö°¡ (ÂüÁ¶°¡ ¾Æ´Ï¶ó) À̸§À¸·Î (º£À̽º °´Ã¼·ÎºÎÅÍ »ó¼Ó¹Þ´Â °ÍÀÌ ¾Æ´Ï¶ó) Á÷Á¢ÀûÀ¸·Î °´Ã¼¿¡ ÀúÀåµÉ °æ¿ì¿¡¸¸ ÀϾ´Ï´Ù. °ü·ÊÀûÀ¸·Î ÇÔ¼ö´Â °´Ã¼ÀÇ À¯Çü°ú ¸Þ½îµåÀÇ À̸§À» °áÇÕÇØ Áþ½À´Ï´Ù.
°´Ã¼´Â ¶Ç´Ù¸¥ °´Ã¼°¡ ±×·ÎºÎÅÍ ÆÄ»ýÇØ ³ª°¡¸é ÇÁ·ÎÅäŸÀÔ(prototype) ¶Ç´Â º£À̽º(base)°¡ µË´Ï´Ù:
other := {} other.base := thing other.test()
ÀÌ °æ¿ì, other´Â foo¸¦ »ó¼Ó¹Þ°í test´Â thingÀ¸·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ½À´Ï´Ù. ÀÌ·± »ó¼Ó °ü°è´Â ¿ªµ¿ÀûÀÔ´Ï´Ù. ±×·¡¼ thing.foo
°¡ º¯°æµÇ¸é, ±× º¯°æÀÌ other.foo
¿¡ ¹Ý¿µµË´Ï´Ù. ½ºÅ©¸³Æ®°¡ other.foo
¿¡ ÇÒ´çÇϸé, ±× °ªÀº other¿¡ ÀúÀåµË´Ï´Ù. thing.foo
¿¡ º¯°æÀ» ´õ °¡ÇÏ´õ¶óµµ other.foo
¿¡´Â ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. other.test()
°¡ È£ÃâµÇ¸é, ±×ÀÇ this ¸Å°³º¯¼ö¿¡´Â thingÀÌ ¾Æ´Ï¶ó other¸¦ °¡¸®Å°´Â ÂüÁ¶°¡ µé¾î°©´Ï´Ù.
¾î¿øÀ¸·Î ¸»ÇÏÀÚ¸é "Ŭ·¡½º"¶õ °øÅëÀÇ Æ¯¼ºÀ̳ª ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Â °ÍµéÀÇ ÇÑ ¹üÁÖ ¶Ç´Â ÁýÇÕÀÔ´Ï´Ù. base °´Ã¼³ª prototype °´Ã¼´Â °´Ã¼ ÁýÇÕ¿¡ ´ëÇÏ¿© Ư¼º°ú ÇàÀ§¸¦ Á¤ÀÇÇϱ⠶§¹®¿¡, Ŭ·¡½º(class) °´Ã¼¶ó°í ºÎ¸¦ ¼öµµ ÀÖ½À´Ï´Ù. ÆíÀǸ¦ À§ÇØ, º£À̽º °´Ã¼´Â ¾Æ·¡¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ "class" Å°¿öµå¸¦ »ç¿ëÇÏ¿© Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù:
class ClassName extends BaseClassName { InstanceVar := Expression static ClassVar := Expression class NestedClass { ... } Method() { ... } Property[] ; °¢°ýÈ£´Â ¼±ÅÃÀûÀÌ´Ù { get { return ... } set { return ... := value } } }
½ºÅ©¸³Æ®°¡ ÀûÀçµÉ ¶§, ÀÌ ÄÚµå´Â °´Ã¼¸¦ Çϳª ±¸¼ºÇÏ°í ±×°ÍÀ» Àü¿ª º¯¼ö (¶Ç´Â v1.1.05+À̶ó¸é ¼öÆÛ-Àü¿ª º¯¼ö) ClassName¿¡ ÀúÀåÇÕ´Ï´Ù. v1.1.05 ÀÌÀüÀ̶ó¸é, ÀÌ Å¬·¡½º¸¦ ÇÔ¼ö ¾È¿¡¼ ÂüÁ¶ÇÏ·Á¸é, ±× ÇÔ¼ö°¡ assume-globalÀÌ ¾Æ´Ñ ÇÑ, global ClassName
¿Í °°Àº ¼±¾ðÀÌ ÇÊ¿äÇÕ´Ï´Ù. extends BaseClassName
°¡ ÀÖÀ¸¸é, BaseClassNameÀº ¹Ýµå½Ã ¶Ç´Ù¸¥ Ŭ·¡½ºÀÇ ¿ÏÀüÇÑ À̸§À̾î¾ß ÇÕ´Ï´Ù (±×·¯³ª v1.1.11¿¡¼´Â Á¤ÀÇµÈ ¼ø¼´Â ¹®Á¦°¡ µÇÁö ¾Ê½À´Ï´Ù). °¢ Ŭ·¡½ºÀÇ ¿ÏÀüÇÑ À̸§ÀÌ object.__Class
¿¡ ÀúÀåµË´Ï´Ù.
ÀÌ ¹®¼ ¾È¿¡¼ Ŭ·¡½º("class")¶ó´Â ´Ü¾î´Â ±× ÀÚü·Î º¸Åë class
Å°¿öµå·Î ±¸¼ºµÈ Ŭ·¡½º °´Ã¼¸¦ ÀǹÌÇÕ´Ï´Ù.
Ŭ·¡½º Á¤ÀÇ´Â º¯¼ö ¼±¾ð, ¸Þ½îµå Á¤ÀÇ, ³»Æ÷ Ŭ·¡½º Á¤ÀǸ¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
½Çü º¯¼ö´Â Ŭ·¡½ºÀÇ °¢ ½Çü°¡ ÀڽŸ¸ÀÇ Å¬·¡½º »çº»À» °¡Áø °ÍÀÔ´Ï´Ù. º¸ÅëÀÇ ÇÒ´çó·³ ¼±¾ðµÇÁö¸¸, this.
Á¢µÎ»ç°¡ »ý·«µÇ¾î ÀÖ½À´Ï´Ù (Ŭ·¡½º ¸öü ¾È¿¡¼ Á÷Á¢ÀûÀ¸·Î »ç¿ëµÉ °æ¿ì¿¡¸¸ »ý·«ÇÕ´Ï´Ù):
InstanceVar := Expression
ÀÌ·± ¼±¾ðÀº Ŭ·§ÀÇ »õ ½Çü°¡ new Å°¿öµå·Î »ý¼ºµÉ ¶§¸¶´Ù ¸Å¹ø Æò°¡µË´Ï´Ù. ¸Þ½îµå À̸§ __Init
Àº ÀÌ·± ¸ñÀûÀ» À§ÇØ ¿¹¾àµÇ¾î ÀÖÀ¸¸ç, ´Ù¸¥ ½ºÅ©¸³Æ®¿¡¼ »ç¿ëÇÏ¸é ¾È µË´Ï´Ù. __New() ¸Þ½îµå´Â º£À̽º Ŭ·¡½º¿¡ Á¤ÀÇµÈ ¼±¾ðÀ» Æ÷ÇÔÇÏ¿© ±× ¸ðµç ¼±¾ðÀÌ Æò°¡µÈ ÈÄ¿¡ È£ÃâµË´Ï´Ù. Ç¥Çö½ÄÀº ´Ù¸¥ ½Çü º¯¼ö¿Í ¸Þ¼Òµå¿¡ this
¸¦ ÅëÇÏ¿© Á¢±ÙÇÒ ¼ö ÀÖÁö¸¸, ¸ðµç ´Ù¸¥ º¯¼ö ÂüÁ¶´Â Àü¿ªÀûÀ̶ó°í °£Áֵ˴ϴÙ.
½Çü º¯¼ö¿¡ Á¢±ÙÇÏ·Á¸é (¸Þ½îµå ¾È¿¡¼µµ ¸¶Âù°¡Áö·Î), ¾ðÁ¦³ª ¸ñÇ¥ °´Ã¼¸¦ ÁöÁ¤ÇÕ´Ï´Ù; ¿¹¸¦ µé¾î, this.InstanceVar
.
[v1.1.08+]: ÀÌ Å¬·¡½º¿¡ x
°¡ ¹Ì¸® ¼±¾ðµÇ¾î ÀÖ´Ù¸é x.y := z
¿Í °°Àº ¼±¾ðµµ Áö¿øµË´Ï´Ù. ¿¹¸¦ µé¾î, x := {}, x.y := 42
´Â x
¸¦ ¼±¾ðÇÏ°í ¶Ç this.x.y
¸¦ ÃʱâÈÇÕ´Ï´Ù.
Á¤Àû/Ŭ·¡½º º¯¼ö´Â Ŭ·¡½º ÀÚü¿¡ ¼ÓÇÏÁö¸¸, (ÇÏÀ§-Ŭ·¡½º¸¦ Æ÷ÇÔÇÏ¿©) ÆÄ»ý °´Ã¼°¡ »ó¼Ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ½Çü º¯¼öó·³ ¼±¾ðµÇÁö¸¸, static Å°¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù:
static ClassVar := Expression
Á¤Àû ¼±¾ðÀº ¿ÀÁ÷ ÀÚµ¿-½ÇÇà ¼½¼Ç Àü¿¡ ÇÑ ¹ø¸¸ Æò°¡µË´Ï´Ù. ±×¸®°í ¼ø¼´ë·Î ½ºÅ©¸³Æ®¿¡ ³ªÅ¸³³´Ï´Ù. °¢ ¼±¾ðÀº °ªÀ» object Ŭ·¡½º¿¡ ÀúÀåÇÕ´Ï´Ù. Ç¥Çö½Ä ¾ÈÀÇ ¸ðµç º¯¼ö ÂüÁ¶´Â Àü¿ªÀûÀ̶ó°í °£Áֵ˴ϴÙ.
Ŭ·¡½º º¯¼ö¿¡ Á¢±ÙÇÏ·Á¸é, ¾ðÁ¦³ª Ŭ·¡½º³ª ÆÄ»ý °´Ã¼¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ClassName.ClassVar
.
[v1.1.08+]: ÀÌ Å¬·¡½º¿¡ x
°¡ ¹Ì¸® Á¤ÀǵǾî ÀÖ´Ù¸é static x.y := z
¿Í °°Àº Ç¥Çöµµ Áö¿øÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, static x := {}, x.y := 42
´Â x
¸¦ ¼±¾ðÇÏ°í ¶Ç ClassName.x.y
¸¦ ÃʱâÈÇÕ´Ï´Ù.
³»Æ÷ Ŭ·¡½º Á¤ÀǴ Ŭ·¡½º °´Ã¼¸¦ ¶Ç´Ù¸¥ Àü¿ª º¯¼ö°¡ ¾Æ´Ï¶ó ¶Ç´Ù¸¥ Ŭ·¡½º °´Ã¼ ¾È¿¡ ÀúÀåµÇµµ·Ï Çã¿ëÇÕ´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼, class NestedClass
´Â °´Ã¼¸¦ ±¸¼ºÇÏ°í ±×°ÍÀ» ClassName.NestedClass
¿¡ ÀúÀåÇÕ´Ï´Ù. ÇÏÀ§-Ŭ·¡½º´Â NestedClass¸¦ »ó¼Ó¹Þ°Å³ª ÀÚ½ÅÀÇ ³»Æ÷ Ŭ·¡½º·Î ±×°ÍÀ» ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ½À´Ï´Ù (ÀÌ °æ¿ì new this.NestedClass
¸¦ »ç¿ëÇÏ¿© ÀûÀýÇÑ Å¬·¡½º¸¦ ½ÇüÈÇÒ ¼ö ÀÖ½À´Ï´Ù).
class NestedClass { ... }
¸Þ½îµå Á¤ÀÇ´Â ÇÔ¼ö Á¤ÀÇ¿Í ¸ð½ÀÀÌ ¶È °°½À´Ï´Ù. °¢ ¸Þ½îµå´Â ¼ûÀº ¸Å°³º¯¼ö·Î this
°¡ Àִµ¥, ÀÌ°ÍÀº ÀüÇüÀûÀ¸·Î Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀº °´Ã¼¸¦ °¡¸®Å°´Â ÂüÁ¶Á¡À» ´ã°í ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸, ¸Þ½îµå°¡ ¾î¶»°Ô È£ÃâµÇ´Â °¡¿¡ µû¶ó Ŭ·¡½º ÀÚü³ª »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ °¡¸®Å°´Â ÂüÁ¶Á¡À» ´ãÀ» ¼öµµ ÀÖ½À´Ï´Ù. ¸Þ½îµå´Â ÀÌ Å¬·¡½º °´Ã¼¿¡ ÂüÁ¶·Î ÀúÀåµË´Ï´Ù.
Method() { ... }
¸Þ½îµå ¾È¿¡¼, ÀÇ»ç-Å°¿öµå base
¸¦ »ç¿ëÇϸé, ÆÄ»ý Ŭ·¡½º ¾È¿¡ ¿À¹ö¶óÀ̵åµÈ ¼öÆÛ-Ŭ·¡½ºÀÇ ¸Þ½îµå³ª Ư¼º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î, À§¿¡ Á¤ÀÇµÈ Å¬·¡½º¿¡¼ base.Method()
´Â BaseClassName¿¡ Á¤ÀÇµÈ Method ¹öÀüÀ» È£ÃâÇÕ´Ï´Ù. ¸ÞŸ-ÇÔ¼ö´Â È£ÃâµÇÁö ¾Ê½À´Ï´Ù;
±×·¸Áö ¾ÊÀ¸¸é, base.Method()
´Â ¸¶Ä¡ BaseClassName.Method.(this)
ó·³ ÇàÀ§ÇÕ´Ï´Ù. ´Ù½Ã ¸»ÇØ,
base.Method()
´Â ¾ðÁ¦³ª ÇöÀç ¸Þ¼Òµå°¡ Á¤ÀǵǾî Àִ Ŭ·¡½ºÀÇ º£À̽º¸¦ ¿äûÇÕ´Ï´Ù. this
°¡ ÀüÀûÀ¸·Î ±× Ŭ·¡½º ¶Ç´Â ´Ù¸¥ Ŭ·¡½ºÀÇ sub-class·ÎºÎÅÍ ÆÄ»ýµÇ¾úÀ»Áö¶óµµ ¸»ÀÔ´Ï´Ù.base.Method()
´Â ¹¬½ÃÀûÀ¸·Î this
¸¦ ù (¼ûÀº) ¸Å°³º¯¼ö·Î °Ç³Ü´Ï´Ù.
base
´Â ´ÙÀ½¿¡ Á¡.
¶Ç´Â °¢°ýÈ£ []
°¡ µû¶ó¿À¸é Ưº°ÇÑ Àǹ̸¦ °¡Áý´Ï´Ù. ±×·¡¼ obj := base, obj.Method()
¿Í °°Àº ÄÚµå´Â ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. ½ºÅ©¸³Æ®´Â baseÀÇ Æ¯º°ÇÑ ÇàÀ§¸¦ ºÒ´ÉÀ¸·Î ¸¸µé ¼ö ÀÖ½À´Ï´Ù. °Å±â¿¡´Ù ºñ¾îÀÖÁö-¾ÊÀº °ªÀ» ÇÒ´çÇÏ¸é µË´Ï´Ù; ±×·¸Áö¸¸, ÀÌ°ÍÀº ±ÇÀåÇÏÁö ¾Ê½À´Ï´Ù. ¿Ö³ÄÇÏ¸é º¯¼ö base´Â ²À ºñ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ½ºÅ©¸³Æ®°¡ #NoEnv¸¦ »©¸ÔÀ¸¸é ¼öÇ༺´ÉÀÌ ÀúÇ쵃 ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
Ư¼º Á¤ÀÇ´Â ½ºÅ©¸³Æ®°¡ ƯÁ¤ÇÑ Å°¸¦ ¼³Á¤Çϰųª ¿¶÷ÇÒ ¶§¸¶´Ù ¸Þ½îµå¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëÇÕ´Ï´Ù.
Property[] { get { return ... } set { return ... := value } }
Property´Â ±×³É È£ÃâÇÏ´Â µ¥ »ç¿ëµÇ´Â Ư¼ºÀÇ À̸§ÀÏ »ÓÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, obj.Property
´Â getÀ» È£ÃâÇÏ´Â ¹Ý¸é¿¡ obj.Property := value
´Â setÀ» È£ÃâÇÕ´Ï´Ù. getÀ̳ª set ¾È¿¡¼, this
´Â ¿äû ÁßÀÎ °´Ã¼¸¦ °¡¸®Åµ´Ï´Ù. set ¾È¿¡¼, value
¿¡´Â ÇÒ´çµÈ °ªÀÌ ´ã±é´Ï´Ù.
¸Å°³º¯¼ö´Â Ư¼º À̸§ÀÇ ¿À¸¥ÂÊ¿¡ °¢°ýÈ£·Î µÑ·¯½Î °Ç³Ú ¼ö ÀÖ½À´Ï´Ù. Ư¼ºÀ» Á¤ÀÇÇÒ ¶§¿Í È£ÃâÇÒ ¶§ ¸ðµÎ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. °¢°ýÈ£¸¦ »ç¿ëÇÏ´Â ¿Ü¿¡µµ, Ư¼ºÀÇ ¸Å°³º¯¼ö´Â ¸Þ½îµåÀÇ ¸Å°³º¯¼ö¿Í °°Àº ¹æ½ÄÀ¸·Î Á¤Àǵ˴ϴ٠- ¼±ÅÃÀû, ByRef ±×¸®°í °¡º¯ ¸Å°³º¯¼ö¸¦ Áö¿øÇÕ´Ï´Ù.
getÀ̳ª setÀÇ ¹Ýȯ°ªÀº ÇØ´ç Ư¼ºÀ» ¿äûÇÑ ÇÏÀ§-Ç¥Çö½ÄÀÇ °á°ú°¡ µË´Ï´Ù. ¿¹¸¦ µé¾î, val := obj.Property := 42
´Â setÀÇ ¹Ýȯ °ªÀ» val
¿¡ ÀúÀåÇÕ´Ï´Ù.
°¢ Ŭ·¡½º´Â Ư¼ºÀÇ Àý¹Ý¸¸ ¶Ç´Â µÑ ´Ù ¿ÂÀüÇÏ°Ô Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù (Ư¼º=¼Ó¼º). Ŭ·¡½º°¡ Ư¼ºÀ» ¿À¹ö¶óÀ̵å Çϸé base.Property
¸¦ »ç¿ëÇÏ¿© ÀÚ½ÅÀÇ ±âº» Ŭ·¡½º¿¡ Á¤ÀÇµÈ Æ¯¼º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. getÀ̳ª setÀÌ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é, ±âº» Ŭ·¡½º°¡ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. setÀÌ Á¤ÀǵǾî ÀÖÁö ¾Ê°í ¸ÞŸ-ÇÔ¼ö³ª ±âº» Ŭ·¡½º¿¡ ÀÇÇÏ¿© 󸮵ÇÁö ¾ÊÀº °æ¿ì, °ªÀ» °´Ã¼¿¡ ÀúÀåÇÏ¸é ±× Æ¯¼ºÀÌ ºÒ´ÉÀÌ µÇ´Â È¿°ú°¡ ÀÖ½À´Ï´Ù.
³»ºÎÀûÀ¸·Î, get°ú setÀº µÎ °³ÀÇ ´Ù¸¥ ¸Þ½îµåÀÔ´Ï´Ù. ±×·¡¼ º¯¼ö¸¦ °øÀ¯ÇÒ ¼ö ¾ø½À´Ï´Ù (this
¿¡ ÀúÀåÇÑ º¯¼ö´Â °¡´ÉÇÕ´Ï´Ù).
¸ÞŸ-ÇÔ¼ö´Â °´Ã¼ÀÇ ¸Þ½îµå¿Í Ư¼º¿¡ Á¢±ÙÀ» º¸´Ù ³Ð°Ô Á¦¾îÇÕ´Ï´Ù. ±×·¯³ª ´õ º¹ÀâÇÏ°í ¿¡·¯¸¦ ÀÏÀ¸Å°´Â °æÇâÀÌ ´õ ³ô½À´Ï´Ù.
ÆÄ»ý °´Ã¼°¡ new
Å°¿öµå·Î »ý¼ºµÉ ¶§¸¶´Ù [requires v1.1.00+], ±×ÀÇ ±â¹Ý Ŭ·¡½º¿¡ Á¤ÀÇµÈ __New
¸Þ½îµå°¡ È£ÃâµË´Ï´Ù. ÀÌ ¸Þ½îµå´Â ¸Å°³º¯¼ö¸¦ ¹Þ¾Æ, ±× °´Ã¼¸¦ ÃʱâÈÇÏ°í new
¿¬»êÀÚÀÇ °á°ú¸¦ °ªÀ» µ¹·ÁÁÜÀ¸·Î½á ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ½À´Ï´Ù.
°´Ã¼°¡ Æı«µÉ ¶§, __Delete
°¡ È£ÃâµË´Ï´Ù. ¿¹¸¦ µé¾î:
m1 := new GMem(0, 20) m2 := {base: GMem}.__New(0, 30) class GMem { __New(aFlags, aSize) { this.ptr := DllCall("GlobalAlloc", "uint", aFlags, "ptr", aSize, "ptr") if !this.ptr return "" MsgBox % "New GMem of " aSize " bytes at address " this.ptr "." return this ; 'new' ¿¬»êÀÚ¸¦ »ç¿ëÇϸé ÀÌ ÁÙÀº »ý·«ÇÒ ¼ö ÀÖ´Ù. } __Delete() { MsgBox % "Delete GMem at address " this.ptr "." DllCall("GlobalFree", "ptr", this.ptr) } }
__Delete´Â "__Class"¸¦ Å°·Î °¡Áö´Â °´Ã¼¿¡ È£ÃâµÇÁö ¾Ê½À´Ï´Ù. Ŭ·¡½º °´Ã¼°¡ ÀÌ Å°¸¦ ±âº»°ªÀ¸·Î °¡Áý´Ï´Ù.
¸Þ½îµå ±¸¹®: class ClassName { __Get([Key, Key2, ...]) __Set([Key, Key2, ...], Value) __Call(Name [, Params...]) } ÇÔ¼ö ±¸¹®: MyGet(this [, Key, Key2, ...]) MySet(this [, Key, Key2, ...], Value) MyCall(this, Name [, Params...]) ClassName := { __Get: Func("MyGet"), __Set: Func("MySet"), __Call: Func("MyCall") }
¸ÞŸ-ÇÔ¼ö´Â ¸ñÇ¥ °´Ã¼ ¾È¿¡ Å°¸¦ ¿äûÇßÁö¸¸ ¾È¿¡¼ ¹ß°ßÇÒ ¼ö ¾øÀ» ¶§ ÀϾ ÇàÀ§¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, obj.key
¿¡ °ªÀÌ ÇÒ´çµÇÁö ¾Ê¾Ò´Ù¸é, __Get ¸ÞŸ-ÇÔ¼ö¸¦ ¿äûÇÕ´Ï´Ù. ºñ½ÁÇÏ°Ô, obj.key := value
´Â __Set¸¦ ¿äûÇÏ°í obj.key()
´Â __Call¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸ÞŸ-ÇÔ¼öµé (¶Ç´Â ¸Þ½îµåµé)Àº obj.base
, obj.base.base
µîµî¿¡ Á¤ÀÇÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
½ºÅ©¸³Æ®°¡ ¸ñÇ¥ °´Ã¼ ¾È¿¡ Á¸ÀçÇÏÁö ¾Ê´Â Å°¸¦ ¿¶÷Çϰųª ¼³Á¤Çϰųª ¶Ç´Â È£ÃâÇϸé, º£À̽º °´Ã¼°¡ ´ÙÀ½°ú °°ÀÌ ¿äûµË´Ï´Ù:
return
)µÇ¸é, (±× ¸ÞŸ-ÇÔ¼ö°¡ ¹«¾ù ¶§¹®¿¡ È£ÃâµÇ¾ú´ÂÁö¿Í »ó°ü¾øÀÌ) ±× ¹Ýȯ °ªÀ» ¿¬»êÀÇ °á°ú·Î »ç¿ëÇÕ´Ï´Ù ±×¸®°í ½ºÅ©¸³Æ®¿¡ Á¦¾î¸¦ ¹ÝȯÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾Æ·¡¿¡ ±â¼úµÈ ´ë·Î °è¼Ó ÁøÇàÇÕ´Ï´Ù.
Set: ¸ÞŸ-ÇÔ¼ö°¡ ÇÒ´çÀ» ó¸®Çϸé, ±× ÇÒ´ç °ªÀ» ¹ÝȯÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô Çϸé a.x := b.y := z
¿Í °°ÀÌ ÇÒ´çÀ» ¿¬¼âÀûÀ¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ýȯ °ªÀº z
ÀÇ ¿ø·¡ °ª°ú ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù (¿¹¸¦ µé¾î, ¾î´À °ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ´ÂÁö Á¦ÇÑÀÌ ºÎ°úµÈ °æ¿ì).
ÇÏÀ§ ȣȯÀÇ ¹®Á¦ ¶§¹®¿¡, ÀÌ ´Ü°è´Â Å°°¡ ¹ß°ß µÇ¾úÀ»Áö¶óµµ set ¿¬»ê¿¡ ´ëÇؼ¸¸ ¼öÇàµË´Ï´Ù (´Ü, setÀ» ±¸ÇöÇÑ Æ¯¼ºÀ» Á¤ÀÇÇß´Ù¸é ¿¹¿ÜÀÔ´Ï´Ù).
this
).
ÀÏÄ¡ÇÏ´Â Å°¸¦ ¸ÞŸ-ÇÔ¼ö°¡ °´Ã¼¿¡ ÀúÀåÇÏÁö¸¸ ¹Ýȯ(return
)ÇÏÁö ¾ÊÀ¸¸é, ±× ÇàÀ§´Â ¸¶Ä¡ Å°°¡ óÀ½ºÎÅÍ ±× °´Ã¼¿¡ Á¸ÀçÇÑ °Í°ú °°½À´Ï´Ù. __SetÀ» »ç¿ëÇÏ´Â ¿¹Á¦´Â ¹è¿ÀÇ ¹è¿ ¼ºê-Ŭ·¡½ÌÇϱ⸦ ÂüÁ¶ÇϽʽÿÀ.
¿¬»êÀÌ ¿©ÀüÈ÷ 󸮵ÇÁö ¾Ê¾Ò´Ù¸é, ÀÌ°ÍÀÌ ³»Àå ÇÔ¼öÀÎÁö ¾Æ´Ï¸é ³»Àå Ư¼ºÀÎÁö Á¡°ËÇϽʽÿÀ:
¿©ÀüÈ÷ ¿¬»êÀÌ Ã³¸®µÇÁö ¾Ê¾Ò´Ù¸é,
¾Ë·ÁÁø ÇÑ°è:
return
À» »ç¿ëÇϸé return ""
°ú µ¿µîÇÕ´Ï´Ù. ÀÌ ÇàÀ§´Â ¹Ì·¡ ¹öÀü¿¡¼´Â ¹Ù²ð ¼ö ÀÖ½À´Ï´Ù. ±âº» ÇàÀ§¸¦ ¿À¹ö¶óÀ̵ùÇÏÁö ¾Ê°í, ¸ÞŸ-ÇÔ¼ö·ÎºÎÅÍ "ÇǽÅ"Çϱâ À§ÇÏ¿© return
À» »ç¿ëÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.__Get°ú __Set¸¦ »ç¿ëÇÏ¿© °ªµéÀ» ƯÁ¤ ¹æ½ÄÀ¸·Î °è»êÇϰųª Á¦ÇÑÇÒ ¼ö Àִ Ư¼ºÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, R, G, B ±×¸®°í RGB Ư¼ºÀ» °¡Áö°í "Color" °´Ã¼¸¦ ±¸Çö ÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©±â¿¡¼ ¿ÀÁ÷ RGB °ª¸¸ ½ÇÁ¦·Î ÀúÀåµË´Ï´Ù:
red := new Color(0xff0000), red.R -= 5 cyan := new Color(0x00ffff) MsgBox % "red: " red.R "," red.G "," red.B " = " red.RGB MsgBox % "cyan: " cyan.R "," cyan.G "," cyan.B " = " cyan.RGB class Color { __New(aRGB) { this.RGB := aRGB } __Get(aName) { if (aName = "R") return (this.RGB >> 16) & 255 if (aName = "G") return (this.RGB >> 8) & 255 if (aName = "B") return this.RGB & 255 } __Set(aName, aValue) { if aName in R,G,B { aValue &= 255 if (aName = "R") this.RGB := (aValue << 16) | (this.RGB & ~0xff0000) else if (aName = "G") this.RGB := (aValue << 8) | (this.RGB & ~0x00ff00) else ; (aName = "B") this.RGB := aValue | (this.RGB & ~0x0000ff) ; 'Return'À» »ç¿ëÇÏ¿© »õ Å°-°ª ½ÖÀÌ ¸¸µé¾îÁöÁö ¾Ê¾ÒÀ½À» ¾Ë·Á¾ß ÇÕ´Ï´Ù. ; ¶ÇÇÑ 'x := clr[name] := val'¿¡¼ ¹«¾ùÀ» 'x'¿¡ ÀúÀåÇÒÁö Á¤ÀÇÇÕ´Ï´Ù: return aValue } } }
obj.func(param)
¿Í °°ÀÌ È£ÃâÇϸé, obj.func´Â ÇÔ¼ö À̸§À̳ª °´Ã¼¸¦ ´ãÀ» ¼ö ÀÖ½À´Ï´Ù. obj.func¿¡ °´Ã¼°¡ µé¾î ÀÖ´Ù¸é, ±× °´Ã¼´Â ±× ¸Þ½îµå À̸§ ´ë½Å¿¡ (obj.func)[obj]()
ó·³ obj·Î ¿äûÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ëºÎºÐÀÇ °æ¿ì obj.func[obj]
´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡ obj.func's __Call ¸ÞŸ-ÇÔ¼ö°¡ ¿äûµË´Ï´Ù. À̸¦ ÀÌ¿ëÇÏ¸é ¾Æ·¡ ¿¹Á¦¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ ÇÔ¼ö È£ÃâÀÇ ÇàÀ§¸¦ Ãß»óÀûÀÎ ¹æ½ÄÀ¸·Î ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù:
; ÇÔ¼ö ¹è¿À» À§ÇÑ ÇÁ·ÎÅäŸÀÔÀ» »ý¼ºÇÑ´Ù. FuncArrayType := {__Call: "FuncType_Call"} ; ÇÔ¼ö ¹è¿À» »ý¼ºÇÑ´Ù. funcArray := {1: "One", 2: "Two", base: FuncArrayType} ; ¹è¿À» ¸Þ½îµå·Î »ç¿ëÇÏ´Â °´Ã¼¸¦ »ý¼ºÇÑ´Ù. obj := {func: funcArray} ; ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. obj.func("foo", "bar") FuncType_Call(func, obj, params*) { ; ÇÔ¼ö ¸®½ºÆ®¸¦ È£ÃâÇÑ´Ù. Loop % ObjMaxIndex(func) func[A_Index](params*) } One(param1, param2) { ListVars Pause } Two(param1, param2) { ListVars Pause }
ÀÌ Å×Å©´ÐÀ» »ç¿ëÇÏ¸é ¸ÞŸ-ÇÔ¼öó·³ ÇàÀ§ÇÏ´Â °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ÀÌÀü ¼½¼Ç¿¡¼ ´Ù·é Ư¼º°ú ºñ½ÁÇÏ°Ô µ¿Àû Ư¼ºµéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. (±×·¸Áö¸¸, ÀÌ ¿¹Á¦´Â Ư¼º Áö¿øÀ¸·Î ´ëüµÇ¾úÀ½À» ÁÖÀÇÇϽʽÿÀ.) ¿¹¸¦ µé¾î:
blue := new Color(0x0000ff) MsgBox % blue.R "," blue.G "," blue.B class Properties { __Call(aTarget, aName, aParams*) { ; ÀÌ Æ¯¼º °´Ã¼¿¡ ÀÌ Àý¹Ý-Ư¼º¿¡ ´ëÇÑ Á¤ÀÇ°¡ µé¾î ÀÖ´Ù¸é, ±×°ÍÀ» È£ÃâÇÕ´Ï´Ù. ; this.HasKey(aName)¸¦ »ç¿ëÇÏÁö ¾Êµµ·Ï ÁÖÀÇÇÕ´Ï´Ù. ÀÌ°ÍÀ» »ç¿ëÇϸé __Call ¾ÈÀ¸·Î Àç±Í°¡ ÀϾ´Ï´Ù. if IsObject(aTarget) && ObjHasKey(this, aName) return this[aName].(aTarget, aParams*) } } class Color { __New(aRGB) { this.RGB := aRGB } class __Get extends Properties { R() { return (this.RGB >> 16) & 255 } G() { return (this.RGB >> 8) & 255 } B() { return this.RGB & 255 } } ;... }
table[x, y] := content
¿Í °°ÀÌ ´ÙÁß-¸Å°³º¯¼ö ÇÒ´ç ¶§¹®¿¡ ¹¬½ÃÀûÀ¸·Î »õ·Î¿î °´Ã¼°¡ »ý¼ºµÉ ¶§, ±× »õ °´Ã¼´Â º¸Åë º£À̽º°¡ ¾ø°í ±×·¯¹Ç·Î ¸ÂÃã ¸Þ½îµåµµ ¾ø°í Ưº°ÇÑ ÇàÀ§µµ ¾ø½À´Ï´Ù. __Set
´Â ¾Æ·¡¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ ÀÌ·± °´Ã¼µéÀ» ÃʱâÈÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
x := {base: {addr: Func("x_Addr"), __Set: Func("x_Setter")}} ; °ªÀ» ÇÒ´çÇÑ´Ù. ¹¬½ÃÀûÀ¸·Î x_Setter¸¦ »ç¿ëÇÏ¿© ÇÏÀ§-°´Ã¼¸¦ ¸¸µç´Ù. x[1,2,3] := "..." ; °ªÀ» ¿¶÷ÇÏ°í ¿¹Á¦ ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. MsgBox % x[1,2,3] "`n" x.addr() "`n" x[1].addr() "`n" x[1,2].addr() x_Setter(x, p1, p2, p3) { x[p1] := new x.base } x_Addr(x) { return &x }
x_Setter
´Â ³× °³ÀÇ Çʼö ¸Å°³º¯¼ö°¡ Àֱ⠶§¹®¿¡, µÎ °³ ÀÌ»óÀÇ Å°°¡ ÀÖÀ» °æ¿ì¿¡¸¸ È£ÃâµË´Ï´Ù. À§ÀÇ ÇÒ´çÀÌ ÀϾ ¶§, ´ÙÀ½°ú °°Àº ÀÏÀÌ ÀϾ´Ï´Ù:
x[1]
´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ±×·¡¼ x_Setter(x,1,2,3)
°¡ È£ÃâµË´Ï´Ù ("..."
´Â °Ç³×ÁöÁö ¾Ê½À´Ï´Ù. ¸Å°³º¯¼ö°¡ ÅξøÀÌ ¸ðÀÚ¶ó±â ¶§¹®ÀÔ´Ï´Ù).
x[1]
´Â x
¿Í º£À̽º°¡ °°Àº °´Ã¼°¡ »õ·Î ÇÒ´çµË´Ï´Ù.x[1][2]
´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ±×·¡¼ x_Setter(x[1],2,3,"...")
ÀÌ È£ÃâµË´Ï´Ù.
x[1][2]
¿¡ x[1]
¿Í º£À̽º°¡ °°Àº °´Ã¼°¡ »õ·Î ÇÒ´çµË´Ï´Ù.x[1][2][3]
Àº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯³ª x_Setter
´Â ³× °³ÀÇ ¸Å°³º¯¼ö¸¦ ¿ä±¸ÇÏ°í ¼¼ °³ ¹Û¿¡ ¾øÀ¸¹Ç·Î (x[1][2], 3, "..."
), È£ÃâµÇÁö ¾Ê°í ÇÒ´çÀº ¿©´À ¶§Ã³·³ ¿Ï·áµË´Ï´Ù.
ºñ-°´Ã¼ °ªÀÌ °´Ã¼ ±¸¹®°ú ÇÔ²² »ç¿ëµÉ ¶§, ±âº» º£À̽º °´Ã¼°¡ ¿äûµË´Ï´Ù.
ÀÌ°ÍÀº µð¹ö±ë¿¡ »ç¿ëÇϰųª ¶Ç´Â ¹®ÀÚ¿À̳ª, ¼ýÀÚ, ±×¸®°í/¶Ç´Â º¯¼ö¿¡ ´ëÇÏ¿© °´Ã¼-·ùÀÇ ÇàÀ§¸¦ Àü¿ªÀûÀ¸·Î Á¤ÀÇÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âº» º£À̽º´Â ºñ-°´Ã¼ °ªÀ» °¡Áö°í .base
¸¦ »ç¿ëÇÏ¿© Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù; ¿¹¸¦ µé¸é, "".base
.
±âº» º£À̽º´Â "".base := Object()
ó·³ ¼³Á¤(set)ÇÒ ¼ö ¾øÁö¸¸, ±âº» º£À̽º´Â "".base.base := Object()
ó·³ ±× ÀÚü·Î º£À̽º°¡ ÀÖ½À´Ï´Ù.
set ¿¬»êÀÇ ¸ñÇ¥·Î ºó º¯¼ö°¡ »ç¿ëµÉ ¶§, Á÷Á¢ÀûÀ¸·Î __Set meta-ÇÔ¼ö¿¡ °Ç³×Áý´Ï´Ù. ±×·¡¼ »õ °´Ã¼¸¦ º¯¼ö¿¡ »ðÀÔÇÒ ±âȸ°¡ ÀÖ½À´Ï´Ù. °£·«ÇÏ°Ô Çϱâ À§ÇØ, ´ÙÀ½ ¿¹Á¦´Â ´ÙÁß ¸Å°³º¯¼ö¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù; ¹°·Ð °¡º¯ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é °¡´ÉÇÕ´Ï´Ù.
"".base.__Set := Func("Default_Set_AutomaticVarInit") empty_var.foo := "bar" MsgBox % empty_var.foo Default_Set_AutomaticVarInit(ByRef var, key, value) { if (var = "") var := Object(key, value) }
°´Ã¼ÀÇ "»çÅÁ ±¸¹®"À» ¹®ÀÚ¿°ú ¼ýÀÚ¿¡ Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
"".base.__Get := Func("Default_Get_PseudoProperty") "".base.is := Func("Default_is") MsgBox % A_AhkPath.length " == " StrLen(A_AhkPath) MsgBox % A_AhkPath.length.is("integer") Default_Get_PseudoProperty(nonobj, key) { if (key = "length") return StrLen(nonobj) } Default_is(nonobj, type) { if nonobj is %type% return true return false }
³»Àå ÇÔ¼öµµ ¿ª½Ã »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ÀÌ °æ¿ì °ýÈ£¸¦ »©¸ÔÀ¸¸é ¾È µË´Ï´Ù. ÁÖÀÇÇϽʽÿÀ:
"".base.length := Func("StrLen") MsgBox % A_AhkPath.length() " == " StrLen(A_AhkPath)
°ªÀ» °´Ã¼Ã³·³ Ãë±ÞµÇµµ·Ï Çã¿ëÇÏ¸é ¹Ù¶÷Á÷ÇÏÁö ¾Ê½À´Ï´Ù. ºñ-°´Ã¼ °ªÀÌ ¿äûµÉ ¶§¸¶´Ù °æ°í »óÀÚ°¡ ³ªÅ¸³¯ ¼ö ÀÖ½À´Ï´Ù:
"".base.__Get := "".base.__Set := "".base.__Call := Func("Default__Warn") empty_var.foo := "bar" x := (1 + 1).is("integer") Default__Warn(nonobj, p1="", p2="", p3="", p4="") { ListLines MsgBox ºñ-°´Ã¼ °ªÀÌ ºÎÀûÀýÇÏ°Ô ¿äûµÇ¾ú½À´Ï´Ù.`n`nƯÈ÷: %nonobj% }
¿ÀÅäÇÖÅ°´Â ±âº»ÀûÀÎ ÂüÁ¶È½¼ö-¼¼±â ¸ÅÄ¿´ÏÁòÀ» »ç¿ëÇÏ¿© ÇÑ °´Ã¼°¡ »ç¿ëÇÏ´Â ÀÚ¿øÀÌ ´õ ÀÌ»ó ÂüÁ¶µÇÁö ¾ÊÀ» ¶§ ÀÚµ¿À¸·Î ÇØÁ¦ÇÕ´Ï´Ù. ½ºÅ©¸³Æ® ÀúÀÚ´Â ÀÌ ¸ÞÄ¿´ÏÁòÀ» ¸í½ÃÀûÀ¸·Î ¿äûÇÏ¸é ¾È µË´Ï´Ù. ´Ü °´Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ °ü¸®µÇÁö ¾Ê¾Æ¼ Á÷Á¢ ó¸®ÇÒ °æ¿ì´Â Á¦¿ÜÇÕ´Ï´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ObjAddRef¸¦ ÂüÁ¶ÇϽʽÿÀ.
; °´Ã¼ÀÇ ÂüÁ¶ Ƚ¼ö¸¦ Áõ°¡½ÃÄÑ "»ì¾Æ ÀÖµµ·Ï À¯ÁöÇÑ´Ù": ObjAddRef(address) ... ; °³Ã¼ÀÇ ÂüÁ¶ Ƚ¼ö¸¦ °¨¼Ò½ÃÄÑ ÇØÁ¦µÇµµ·Ï ÇÑ´Ù: ObjRelease(address)
±×·¸Áö¸¸, ObjAddRef´Â Object(obj)
¸¦ ÅëÇÏ¿© ÁÖ¼Ò¸¦ ÃÖÃʷΠȹµæÇÒ ¶§´Â »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î ÇÑ °´Ã¼ÀÇ ÁÖ¼ÒÀÇ °¢ »õ »çº»Àº °´Ã¼ ÂüÁ¶·Î °£ÁÖÇØ¾ß ÇÕ´Ï´Ù. ´Ü, ±× ½ºÅ©¸³Æ®°¡ ObjAddRef ±×¸®°í/¶Ç´Â ObjRelease¸¦ ÀûÀýÇÏ°Ô È£ÃâÇÒ Ã¥ÀÓÀÌ ÀÖ´Â °æ¿ì´Â ¿¹¿ÜÀÔ´Ï´Ù.
¿¹¸¦ µé¸é, x := address
¿Í °°Àº °ÍÀ» ÅëÇÏ¿© ÁÖ¼Ò°¡ º¹»çµÉ ¶§¸¶´Ù, ObjAddRef °¡ È£ÃâµÇ¾î ÂüÁ¶ Ƚ¼ö¸¦ Áõ°¡½ÃÄÑ¾ß ÇÕ´Ï´Ù.
ºñ½ÁÇÏ°Ô, ½ºÅ©¸³Æ®°¡ ±× °´Ã¼ÀÇ ÁÖ¼ÒÀÇ Æ¯º°ÇÑ »çº»°úÀÇ ÀÛ¾÷ÀÌ ³¡³¯ ¶§¸¶´Ù, ObjRelease¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ±×ÀÇ ¸¶Áö¸· ÂüÁ¶°¡ »ç¶óÁú ¶§ È®½ÇÇÏ°Ô °´Ã¼°¡ ÇØÁ¦µË´Ï´Ù - ±× Àü¿¡´Â ÇØÁ¦µÇÁö ¾Ê½À´Ï´Ù.
°´Ã¼ÀÇ ¸¶Áö¸· ÂüÁ¶°¡ ÇØÁ¦µÉ ¶§ Äڵ带 ½ÇÇàÇÏ·Á¸é, __Delete ¸ÞŸ-ÇÔ¼ö¸¦ ±¸ÇöÇÕ´Ï´Ù.
¾Ë·ÁÁø ÇÑ°è:
ÇÁ·Î±×·¥ÀÌ Á¾·áÇÒ ¶§ °´Ã¼°¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸®¸¦ ¿î¿µÃ¼Á¦°¡ ¿ä±¸ÇÔ¿¡µµ ºÒ±¸ÇÏ°í, ±× °´Ã¼¸¦ °¡¸®Å°´Â ¸ðµç ÂüÁ¶°¡ Ç®¸®Áö ¾Ê´Â ÇÑ, __Delete´Â È£ÃâµÇÁö ¾Ê½À´Ï´Ù. ÀÌ°ÍÀº Àӽà ÆÄÀÏ°ú °°ÀÌ, ¿î¿µ üÁ¦°¡ ÀÚµ¿À¸·Î ¿ä±¸ÇÏÁö ¾Ê´Â ´Ù¸¥ ÀÚ¿øÀ» Ç®¾î¹ö¸®¸é ¹®Á¦°¡ µÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
¾î¶² °æ¿ì´Â DllCallÀ» ÅëÇÏ¿© °´Ã¼¸¦ ¿ÜºÎ Äڵ忡 °Ç³Ú ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¶Ç´Â ±×°ÍÀ» ÀÌÁø µ¥ÀÌÅÍ ±¸Á¶·Î ÀúÀåÇÏ¿© ³ªÁß¿¡ ¿¶÷ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. °´Ã¼ÀÇ ÁÖ¼Ò´Â x := &obj
·Î ¿¶÷ÇÒ ¼ö ÀÖ½À´Ï´Ù; ±×·¸Áö¸¸, º¯¼ö obj°¡ ¼Ò°ÅµÇ¸é, ±× °´Ã¼´Â ÀÏÂî±â ÇØÁ¦µÇ¾î ¹ö¸± ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ÀÏÀÌ ÀϾÁö ¾Êµµ·Ï È®ÀÎÇÏ·Á¸é, À§¿¡ º¸¿©ÁØ ¹Ù¿Í °°ÀÌ ObjAddRef¸¦ »ç¿ëÇϰųª ¾Æ·¡¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ Object()
ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù:
address := Object(object)
°Ô´Ù°¡, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÁÖ¼Ò¸¦ ´Ù½Ã ÂüÁ¶·Î º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù:
object := Object(address)
¾î´À °æ¿ìµç °´Ã¼ÀÇ ÂüÁ¶-Ƚ¼ö´Â ÀÚµ¿À¸·Î Áõ°¡µË´Ï´Ù. ±×·¡¼ °´Ã¼´Â ³Ê¹« À̸£°Ô ÇØÁ¦µÇÁö ¾Ê½À´Ï´Ù.
ÀÌ ÇÔ¼ö´Â ¿¹¸¦ µé¾î COM °´Ã¼ ·¡ÆÛ³ª ÆÄÀÏ °´Ã¼¿Í °°ÀÌ Object()·Î »ý¼ºµÇÁö ¾ÊÀº °´Ã¼¿¡µµ ¶È °°ÀÌ Àû¿ëµÇ´Â °Í¿¡ ÁÖ¸ñÇϽʽÿÀ.