变量的类型
: AutoHotkey 中没有明确的变量类型. 然而, 只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值. (为了提高性能, 在内部会对数字进行缓存以避免与字符串之间的转换.)
变量的作用域和声明
: 除了函数中的 局部变量
, 其他所有变量都是全局的; 即可以在脚本的任意位置读取或修改它们的内容. 除了在函数页面
注明的情况,变量都是不需要声明的;使用它们的时候它们就产生了(每个变量初始为空).
变量的名称
: 变量名不区分大小写 (例如,CurrentDate
等同于currentdate
). 变量名可以含有多达 253 个字符, 并且可以由字母, 数字以及后面的标点组成: # _ @ $
考虑到命名的惯例, 通常在命名变量时最好仅使用字母, 数字和下划线 (例如:CursorPosition
,Total_Items
和entry_is_valid
). 这样的风格可以让熟悉其他计算机语言的人更容易理解您的脚本. 而且, 如果您在 AutoHotkey 和其他语言中使用相同的风格, 您会发现能更容易重新读懂自己的脚本.
尽管变量名可以完全由数字组成, 但通常这样的名称仅用于 传入的命令行参数
. 这样数值名称的变量不能用在 表达式
中, 因为它们会被看成是数字而不是变量.
因为单词AND
,OR
和NOT
作为表达式的 运算符
使用, 所以通常不应该把它们用作变量名称. 在表达式中使用这样的名称会无法正确计算.
给变量赋值
: 要把字符串或数字保存到变量中, 有两种方法: 传统方法和表达式方法. 传统方法使用 等号运算符 (=)
来指定没有加引号的
原义字符串或包围在百分号中的变量.
例如:
MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var% ; 和 = 运算符一起使用时, 需要使用百分号来获取变量的内容.
变量和表达式
与之相比, 表达式方法使用 冒号等号运算符 (:=)
来保存数字,加引号的
字符串和其他类型的 表达式
. 下面的例子在功能上与前面的例子相同:
MyNumber := 123MyString := "This is a literal string."CopyOfVar := Var; 和前面段落中与其作用相同的语句不同, 百分号不和 := 运算符一起使用.
让变量为空:
MyVar =
MyVar := ""
获取变量的内容
: 如同赋值有两种方法, 获取变量的内容也有两种方法: 传统方法和表达式方法. 传统方法需要将变量名包围在百分号中来获取变量的内容. 例如:
MsgBox
The value in the variable named Var is %Var%.CopyOfVar = %Var%
与之相比, 表达式方法省去了变量名两边的百分号, 但原义的字符串必须包围在双引号中. 所以, 下面的表达式作用等同于上面的例子:
MsgBox%
"The value in the variable named Var is " . Var . "."; 使用句点连接 (join 拼接) 两个字符串.
CopyOfVar := Var
在上面的 MsgBox 这行, 通过使用百分号和空格把参数从传统模式改变为表达式模式. 因为所有的命令默认情况下使用传统模式 (除了另外注明的那些), 所以这是必须的. 不过, 某些命令的特定参数已注明接受表达式, 此时前导的百分号可以省略. 例如, 下面的所有语句都是等效的, 因为 Sleep
的首个参数可以是表达式:
Sleep MillisecondsToWaitSleep %MillisecondsToWait%Sleep % MillisecondsToWait
变量的比较
: 请阅读下面表达式部分中关于不同类型变量比较的重要提示, 尤其是关于何时使用小括号的内容