Keyword Reference

首页  后退  前进

Static

定义静态变量或静态数组.

 

Static [作用域] $variable [ = 初值 ]

Static [作用域] 数组[索引 1]...[索引 n] [ = 初值 ]

参数

作用域

可选修饰符, 指定变量的作用范围: LocalGlobal.

变量

静态变量的名称.

初值

分配给变量的初始值. 可以是函数调用的数学或字符串运算. 此值仅在变量第一次声明时计算.

索引

数组维数的元素数量, 索引为 0 到 n-1.

备注

关键字"Static"可以出现在可选参数"作用域"之前或以后, 例如: Local StaticStatic Local 都是允许的.

 

如果指定"作用域" 参数为 Local, 则静态变量仅在声明它的函数逻辑范围内有效. 即只有当符合声明条件的变量是可见的.

如果指定"作用域"参数为 Global, 则静态变量在脚本任何部分都有效, 此时的静态变量与脚本的全局变量的差别很小.

如果不使用"作用域", 则静态变量将被创建为局部范围; 此时的 Static 类似函数 Dim.

 

Local 与 Static 的不同之处是变量的生存期.

Local 只存储函数被调用时的信息, 并且只能作用于函数声明它的函数范围内;

当函数返回, 所有的局部变量被释放.

Static 的作用范围与 Local 相同, 但当函数结束执行后, 它们能继续存在, 且保留其最后一个值.

当寻找变量时, 首先检查局部范围, 然后是全局范围.

 

关键字 Static 的执行类似关键字 Global/Local/Dim.

1.都是先声明变量, 然后才能使用它.
2.都可以创建数组.

 

 

注意: 无论 AutoItSetOption("MustDeclareVars") 是否设置, 静态变量使用前, 必须使用关键字 Static 声明, 静态变量不能是 Const 常量.

 

可以在一行中声明多个静态变量:

Static $a, $b, $c

 

并初始化变量:

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

 

 

初始化静态变量, 初始值仅在创建时计算和分配, 在脚本随后的执行中, 所有的初始值将被忽略.

 

有关使用数组的信息参见 Local, 它具有与 Local 相同的功能, 以下情况除外:

1.初始化静态变量时没有任何影响.
2.不能修改局部静态变量为全局变量, 反之亦然.

 

 

如果要调整数组, 应使用 ReDim.

 

并初始化变量:

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

 

 

初始化静态变量, 初始值仅在创建时计算和分配, 在脚本随后的执行中, 所有的初始值将被忽略.

 

有关使用数组的信息参见 Local, 它具有与 Local 相同的功能, 以下情况除外:

1.初始化静态变量时没有任何影响.
2.不能修改局部静态变量为全局变量, 反之亦然.

 

 

如果要调整数组, 应使用 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

----------------------------------------