"函数对象"泛指以下内容:
函数对象可被以下对象使用:
用户定义函数对象应按以下模式:
class YourClassName { Call(a, b) { ;声明参数,或数组*。 ;... } __Call(method, args*) { if (method = "") ;对%fn%()或fn.() return this.Call(args*) if (IsObject(method)) ; 如果此函数对象作为方法被使用。 return this.Call(method, args*) } ;... }
模式中各个部分适用于不同的使用情形,如下:
this.()
的形式调用,则,method
(方法名)的值是空字符串。IsObject(method)
返回真,并且method
包含关于目标对象的引用。如:若x.y
指向this
函数对象,则x.y()
→ this[x]()
→ this.__Call(x)
→ this.Call(x)
.上述过程可以直接在__Call中完成,推荐使用__Call代替Call以便更好的迁移到V2版本,其会改变%this%()
的行为及调用CALL的方法调用。
行为像函数,但仅将传递给自己的参数绑定至另一个函数。
有两种建立函数绑定对象的方式:
函数绑定对象可按如下实例调用。不支持其他方法。当函数绑定对象被调用时,它调用被绑定的函数或方法,传递绑定的参数,及调用时的参数。例如:
fn := Func("RealFn").Bind(1) %fn%(2) ; 显示 "1, 2" fn.Call(3) ; 显示 "1, 3" RealFn(a, b) { MsgBox %a%, %b% }
ObjBindMethod()用于绑定无法引用的方法。例如:
file := FileOpen(A_ScriptFullPath, "r") getLine := ObjBindMethod(file, "ReadLine") MsgBox % %getLine%() ;显示此文件的第一行。