关键字参考


Dim / Global / Local / Const

定义一个变量,常量,或者创建一个数组

Dim [Const] $variable [ = initializer ]
Dim [Const] $array[subscript 1]...[subscript n] [ = initializer ]

参数

const [可选参数] 如果定义, Const 关键字将创建一个常量而不是变量.
$variable 需要声明的变量/常量名称.
initializer 为变量赋的初始值. 使用 Const 关键字必须包含 initializer (因为创建的是常量,不能再赋值). 初始值可以是一个函数 call.
subscript 一个多维数组的元素数量,索引为0 到 n-1.

注意/说明

与 Dim/Local/Global 关键字完成类似功能的函数:
1. 声明一个变量然后使用(就像 VBScript)
2. 创建一个数组

提示: 在 AutoIt 里面,您可以简单的创建一个变量并赋值 ($myvar = 0).但是很多人们喜欢明确的声明它们. 你可以在脚本最前加上 AutoItSetOption("MustDeclareVars", 1), 然后所有要使用的变量都必须先声明才能使用.

您可以在一行里面声明多个变量:

Dim $a, $b, $c


声明时分配一个初始值到变量:

Dim $a = 2, $b = 10, $c = 20



声明一个常量也可以使用类似的方法:

Const $a = 2, $b = 10, $c = 20
Dim Const $d = 21, $e = Exp(1)
Local Const $f = 5, $g = 7, $h = -2


当然,您不能再修改一个已声明的常量的值.同样的,您也不能将一个存在的常量修改为一个变量.



要初始化一个数组, 需要在方括号"[]"里面指定每一个元素的值, 使用逗号分开. 如果有多个维数, 可以再套用方括号进行赋值. 你可以分配的值的数量不能超过声明的元素数量
(为元素$x[3]的值不能大于$x[3],比如可以分配$x[2]的值,但不能分配$x[4]的值).

函数 calls 也可以放置一个已初始化的数组. 如果函数 call 返回一个数组, 原先的数组(变量)将包含返回的数组(同时变量成为数组).

例如:$msg=FuncCall(),FuncCall()如果返回一个值,$msg为一个变量,如果返回一个数组,$msg为一个数组.

Dim $Array1[12]=[3, 7.5, "string"], $array[5] = [8, 4, 5, 9, 1]
Dim $Grid[2][4]=[["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Dim $Test[5] = [3, 1, StringSplit("Abe|Jack|Bobby|Marty", "|"), Cos(0)]



Dim,Local,Global 这三者的不同之处在于其声明变量的作用域:
Dim = 如果同名的全局变量并不存在则作用域为局部(如果已有同名的全局变量存在则将复用该变量!)
Global = 将创建的变量的作用域强制转换为全局的
Local = 将创建的变量的作用域强制转换为 局部/函数 的

您应该更多的使用 Local 或者 Global, 而不是 Dim, 这样能够更清楚的了解每个已经声明的 变量/常数/数组的作用范围.

在使用变量时程序将首先检查其局部作用域然后再检查其全局作用域.

创建数组时有一个限制:数组最大只能达64维 和/或 共1600万个元素.

关于数组,有一点比较特别,那就是数组允许被(整体)复制,比如:
$mycopy = $myarray
在上例中,$mycopy 将成为数组 $myarray 的一份完整副本并具有同样地维数(不需要事先通过 Dim 语句声明它). 如果设置了 AutoItSetOption("MustDeclareVars", 1) 选项,$mycopy 还是需要先声明的,但是可以不必知道数组的大小. 如果变量 $mycopy 本身就已经是数组或已被赋值,则程序将先把它的内容删除随后再执行复制动作.

如果要删除某个数组(比如某个全局数组存储地内容非常大,可能我们就需要把它删除以释放内存空间), 简单的分配一个单值给它:
$array = 0
这样之后该数组所占空间将被释放,同时它的值变成 0(注意:数组没有真正意义上被删除).

Declaring the same variable name again will erase all array values and reset the dimensions to the new definition. Declaring a variable with a simple value in the same scope will not change the value in the variable.

If you declare a variable with the same name as a parameter, using Local inside a user function, an error will occur. Global can be used to assign to global variables inside a function, but if a local variable (or parameter) has the same name as a global variable, the local variable will be the only one used. It is recommended that local and global variables have distinct names.

相关

UBound, ReDim, Static, AutoItSetOption

示例/演示


; 例子 1- 声明变量
Local $i, $j = 23, $k
Global $nPI = 3.14159, $iRADIUS
Local $_DaysWorking = 5

; 例子 2- 声明数组
Global $aChessBoard[8][8]
Local $a_States[2], $WindowsStats[4]

; 例子 3 - 声明常(变)量
Const $x1 = 11, $y1 = 23, $z1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $DaysWorking = 5