如果指定变量已经被赋值, 则返回一个非零数字.
VarIsSet := IsSet(Var)
VarIsSet := IsSetRef(&Ref)
类型: 变量
一个直接变量引用. 例如: IsSet(MyVar)
.
类型: VarRef
对变量的间接引用. 通常不会像在 IsSetRef(&MyVar)
中那样直接传递, 而是间接传递, 比如在解引用一个 包含 VarRef 的参数之前检查它.
类型: 整数(布尔值)
如果 Var 或由 Ref 表示的变量已经被赋值, 则返回值为 1(true), 否则为 0(false).
使用 IsSet 来直接检查一个变量, 如 IsSet(MyGlobalVar)
.
使用 IsSetRef 来检查一个 VarRef, 它通常被一个变量所包含, 如下面的示例所示.
未赋值的变量也称为未初始化变量. 默认情况下, 试图读取一个未初始化的变量会导致异常抛出. IsSet 可以用来避免这种情况, 例如在第一次使用全局变量或静态变量时是否需要初始化.
注意: 静态初始化 如 static my_static_array := []
只被计算一次, 即在执行过程中第一次到达时, 因此通常不需要使用 IsSet.
尽管 IsSet 使用了与函数调用相同的语法, 但它可以被认为是一个操作符而不是一个函数. 关键字 IsSet 保留用于此处所示的用法, 不能被重新定义为一个变量或函数. IsSet 不能被间接调用, 因为任何试图传递一个未初始化的变量的行为都会导致错误的产生.
IsSetRef 也可以用来检查一个特定的变量, 通过与引用操作符一起使用. 当以这种方式使用它时, 要注意如果是全局变量需要先声明该变量. 例如, 如果在一个没有声明 global MyVar
的假设-局部函数中使用的话, IsSetRef(&MyVar)
中的 &
会导致 MyVar 默认解析为一个局部变量.
Loop 2 if !IsSet(MyVar) ; 是否是第一次 "使用" MyVar? MyVar := A_Index ; 第一次 "使用" 时进行初始化. MsgBox Function1(&MyVar) MsgBox Function2(&MyVar) Function1(&Param) ; ByRef 参数. { if IsSet(Param) ; 传递 Param 本身, 它是 MyVar 的别名. return Param ; ByRef 参数会自动解引用. else return "unset" } Function2(Param) { if IsSetRef(Param) ; 传递包含 VarRef 的 Param. return %Param% ; 显式解引用 Param. else return "unset" }