Static
定义静态变量或静态数组.
Static [作用域] $variable [ = 初值 ]
Static [作用域] 数组[索引 1]...[索引 n] [ = 初值 ]
参数
作用域
|
可选修饰符, 指定变量的作用范围: Local 或 Global.
|
变量
|
静态变量的名称.
|
初值
|
分配给变量的初始值. 可以是函数调用的数学或字符串运算. 此值仅在变量第一次声明时计算.
|
索引
|
数组维数的元素数量, 索引为 0 到 n-1.
|
备注
关键字"Static"可以出现在可选参数"作用域"之前或以后, 例如: Local Static 或 Static Local 都是允许的.
如果指定"作用域" 参数为 Local, 则静态变量仅在声明它的函数逻辑范围内有效. 即只有当符合声明条件的变量是可见的.
如果指定"作用域"参数为 Global, 则静态变量在脚本任何部分都有效, 此时的静态变量与脚本的全局变量的差别很小.
如果不使用"作用域", 则静态变量将被创建为局部范围; 此时的 Static 类似函数 Dim.
Local 与 Static 的不同之处是变量的生存期.
Local 只存储函数被调用时的信息, 并且只能作用于函数声明它的函数范围内;
当函数返回, 所有的局部变量被释放.
Static 的作用范围与 Local 相同, 但当函数结束执行后, 它们能继续存在, 且保留其最后一个值.
当寻找变量时, 首先检查局部范围, 然后是全局范围.
关键字 Static 的执行类似关键字 Global/Local/Dim.
注意: 无论 AutoItSetOption("MustDeclareVars") 是否设置, 静态变量使用前, 必须使用关键字 Static 声明, 静态变量不能是 Const 常量.
可以在一行中声明多个静态变量:
Static $a, $b, $c
并初始化变量:
Static $a = 2, $b = 10, $c = 20
初始化静态变量, 初始值仅在创建时计算和分配, 在脚本随后的执行中, 所有的初始值将被忽略.
有关使用数组的信息参见 Local, 它具有与 Local 相同的功能, 以下情况除外:
如果要调整数组, 应使用 ReDim.
并初始化变量:
Static $a = 2, $b = 10, $c = 20
初始化静态变量, 初始值仅在创建时计算和分配, 在脚本随后的执行中, 所有的初始值将被忽略.
有关使用数组的信息参见 Local, 它具有与 Local 相同的功能, 以下情况除外:
如果要调整数组, 应使用 ReDim.
相关
AutoItSetOption, Local, ReDim, UBound
函数示例
示例 1
#include <MsgBoxConstants.au3>
; Call the Example function to initialize the Static variable in Local scope.
Example()
; Call the Example function a second time to show that the variable has retained the data we last assigned to it.
Example()
Func Example()
Local Static $sString = "This is a line of text which is declared using a Static variable in Local scope." & @CRLF & @CRLF & _
"The variable $sString will now be visible to this function only and until the script closes."
MsgBox($MB_SYSTEMMODAL, "", $sString)
$sString = "If using just Local scope this string wouldn't be visible if this function was called multiple times, but since we're using the Static keyword" & @CRLF & _
"the variable $sString will retain the data last assigned to it."
EndFunc ;==>Example
示例 2
#include <MsgBoxConstants.au3>
Example()
Func Example()
SomeFunc() ; This will display a message box of 1, 1.
SomeFunc() ; This will display a message box of 1, 2.
SomeFunc() ; This will display a message box of 1, 3.
EndFunc ;==>Example
Func SomeFunc()
; This initialises a Static variable in Local scope. When a variable is declared just in Local scope (within a Function,)
; it's destroyed when the Function ends/returns. This isn't the case for a Static variable. The variable can't be
; accessed from anywhere else in the script apart from the Function it was declared in.
Local Static $vVariableThatIsStatic = 0
Local $vVariableThatIsLocal = 0
$vVariableThatIsLocal += 1 ; This will always be 1 as it was destroyed once returned from SomeFunc.
$vVariableThatIsStatic += 1 ; This will increase by 1.
MsgBox($MB_SYSTEMMODAL, $vVariableThatIsLocal, $vVariableThatIsStatic)
EndFunc ;==>SomeFunc
----------------------------------------
|