标签用来标识代码行, 可以作为 Goto 目标或组成 子程序.
LabelName:
要创建标签, 请像上面那样写下标签名和冒号. 除了空白字符和注释, 其他代码不能与标签写在同一行.
名称: 标签名不区分大小写, 且可以由除空格, tab, 逗号以及 转义字符 (`) 外的其他字符组成. 然而, 考虑到命名的惯例, 通常最好仅使用字母, 数字和下划线 (例如: MyListView, Menu_File_Open 和 outer_loop). 在整个脚本中标签名必须是唯一的.
目标: 标签的目标是下一个可执行的代码行. 可执行代码包含命令, 赋值, 表达式 和 区块, 但不包括指令, 标签, 热键或热字串. 在下面的例子中,run_notepad
和 #n
标签都指向 Run
行:
run_notepad: #n:: Run Notepad return
执行: 与指令类似, 正常执行到标签时标签会被忽略. 在下面的例子中, 消息框会显示两次: 一次是在执行 Gosub 的目标子程序时, 再次是在前面的子程序返回后:
gosub Label1 Label1: MsgBox %A_ThisLabel% return
子程序是一部分代码, 可以对它进行 调用 来执行特定的任务. 子程序的执行从目标标签开始, 一直执行到遇上 Return 或 Exit. 由于子程序的结尾决定于流控制, 所以任何标签既作为 Goto 的目标同时也是子程序的开始.
接受标签名的许多命令也可以接受 变量 引用 (例如 %MyLabel%), 此时变量中保存了目标标签的名称. 然而, 性能会稍微降低, 因为每次都必须 "查找" 目标标签名而不是只在脚本首次加载时查找一次.
热键 和 热字串标签 也可以作为 Goto, Gosub 以及其他命令的目标. 然而, 如果一个热键或热字串含有多个 变体, 则使用最接近脚本顶部的那个变体. 所有的热键修饰键或热字串选项都是标签名的一部分, 但不包括最后的双冒号 (::).
标签还可以用来标识循环, 以便用于 Continue 和 Break 命令. 这样脚本可以很方便地继续或退出任意数目的内嵌循环.
IsLabel(), A_ThisLabel, Gosub, Goto, OnExit, SetTimer, Hotkey, Gui 事件, g 标签, OnClipboardChange