"ÇÔ¼ö °´Ã¼"´Â º¸Åë ´ÙÀ½À» ¶æÇÕ´Ï´Ù:
ÇÔ¼ö °´Ã¼´Â ´ÙÀ½°ú ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:
»ç¿ëÀÚ-Á¤ÀÇ ÇÔ¼ö °´Ã¼´Â ´ÙÀ½ ÀÏ¹Ý ÆÐÅÏÀ» µû¶ó¾ß ÇÕ´Ï´Ù:
class YourClassName {
Call(a, b) { ; ÇÊ¿äÇÑ ¸¸Å ¸Å°³º¯¼ö¸¦ ¼±¾ðÇϰųª, array*¸¦ ¼±¾ðÇÕ´Ï´Ù.
;...
}
__Call(method, args*) {
if (method = "") ; For %fn%() or fn.()
return this.Call(args*)
if (IsObject(method)) ; ÀÌ ÇÔ¼ö °´Ã¼°¡ ¸Þ½îµå·Î »ç¿ëµÇ¸é.
return this.Call(method, args*)
}
;...
}
Á¤È®ÇÏ°Ô ¾î´À ºÎºÐÀÌ ÇÊ¿äÇÑÁö´Â »ç¿ë¹ý¿¡ µû¶ó ´Ù¸¨´Ï´Ù:
%this%()³ª this.()¸¦ »ç¿ëÇß´Ù¸é method´Â ºó ¹®ÀÚ¿ÀÔ´Ï´Ù.IsObject(method)´Â ÂüÀ̰í method¿¡´Â ¸ñÇ¥ °´Ã¼¸¦ °¡¸®Å°´Â ÂüÁ¶ ÁÖ¼Ò°¡ ´ã±é´Ï´Ù. ¿¹¸¦ µé¾î, x.y°¡ this ÇÔ¼ö °´Ã¼¸¦ °¡¸®Å°¸é, x.y() → this[x]() → this.__Call(x) → this.Call(x).
__CallÀ¸·Î Á÷Á¢ °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸, __CallÀ» Call·Î ¹æÇâÀüȯÇϱ⸦ ±ÇÀåÇÕ´Ï´Ù. ½±°Ô AutoHotkey v2·Î ÀÌÀüÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ÀÅäÇÖŰ v2¿¡¼ %this%()ÀÇ ÇàÀ§¿Í ¸Þ½îµå È£ÃâÀº Á÷Á¢ÀûÀ¸·Î Call ¸Þ½îµå¸¦ È£ÃâÇϵµ·Ï º¯°æµÇ¾ú½À´Ï´Ù.
ÇÔ¼öó·³ ÇàÀ§ÇÕ´Ï´Ù. ±×·¯³ª ±×Àú ¹Ì¸® Á¤ÀÇµÈ ¸Å°³º¯¼ö¸¦ ´Ù¸¥ ÇÔ¼ö·Î °Ç³×´Â ¿ªÇÒ¸¸ ÇÕ´Ï´Ù.
µÎ °¡Áö ¹æ¹ýÀ¸·Î BoundFunc °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù:
BoundFunc °´Ã¼´Â ¾Æ·¡ ¿¹Á¦¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ¸Þ½îµå´Â Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. BoundFunc°¡ È£ÃâµÉ ¶§, ±×¿¡ ¹ÀÎ ÇÔ¼ö³ª ¸Þ½îµå¸¦ È£ÃâÇϸé¼, ¹ÀÎ ¸Å°³º¯¼ö¿Í ±×¸®°í È£ÃâÀÚ°¡ °Ç³Ù °ÍÀ» ¸ðµÎ °Ç³Ü´Ï´Ù. ¿¹¸¦ µé¾î:
fn := Func("RealFn").Bind(1)
%fn%(2) ; Shows "1, 2"
fn.Call(3) ; Shows "1, 3"
RealFn(a, b) {
MsgBox %a%, %b%
}
ObjBindMethod()¸¦ »ç¿ëÇÏ¸é ¸Þ½îµå ÀÚü¸¦ °¡¸®Å°´Â ÂüÁ¶ ÁÖ¼Ò¸¦ ¿¶÷ÇÒ ¼ö ¾øÀ» ¶§ ¸Þ½îµå¿¡ ¹À» ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î:
file := FileOpen(A_ScriptFullPath, "r") getLine := ObjBindMethod(file, "ReadLine") MsgBox % %getLine%() ; ÀÌ ÆÄÀÏÀÇ Ã¹ ÁÙÀ» º¸¿©ÁÝ´Ï´Ù.