很多 AHK v1 新手写到一定程度后,会卡在对象和数组上:什么时候用伪数组,什么时候用对象,为什么 arr[1] 可以,为什么 obj.name 也可以。对象不是高级炫技,它是让脚本不乱的基础工具。

先给结论

  • 一组按顺序的数据:用数组。
  • 一组有名字的配置:用对象。
  • 遍历对象或数组:用 for
  • 把函数当回调传递:再看函数对象和 ObjBindMethod()
  • 新项目尽量少用伪数组,优先用真正的对象。

数组:适合有顺序的数据

比如文件列表、任务列表、关键词列表,这些通常只关心第几个。

#Requires AutoHotkey v1.1
files := ["a.txt", "b.txt", "c.txt"]

for index, fileName in files {
    MsgBox, % index ": " fileName
}

对象:适合有名字的数据

配置、用户信息、窗口信息这类数据,用对象会清楚很多。

user := {}
user.name := "张三"
user.age := 18

MsgBox, % user.name " / " user.age

把窗口信息放进对象

窗口控制脚本经常要同时保存标题、类名、进程名、句柄。如果都散在变量里,很快就不好维护。

win := {}
win.title := "无标题 - 记事本"
win.class := "Notepad"
win.query := "ahk_class " win.class

if WinExist(win.query)
    WinActivate

For 遍历对象

for key, value in obj 是对象最常用的读法。它比手动维护一堆变量更适合批量处理。

config := {delay: 100, mode: "fast", log: true}

for key, value in config {
    text .= key ": " value "`n"
}

MsgBox, % text

什么时候看函数对象

普通新手不用一开始就研究函数对象。等你需要回调、定时器绑定参数、GUI 事件分发、封装类库时,再看 Func()ObjBindMethod() 会更自然。

 

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。