AutoHotkey警告局部变量与全局变量同名

时间:2017-08-29 19:10:34

标签: global-variables autohotkey compiler-warnings

每次尝试从启用了#warn的AutoHotkey函数访问全局变量时,我都会显示一条警告提示,说明我的局部变量与全局变量同名。

如果我从hotstring访问该变量,代码将按预期运行而不会发出任何警告。

#Warn
myString := "Hello, world!"

DisplayString() {
   MsgBox %myString%   ; Warning: local variable
}

^j::
   MsgBox, %myString%  ; Perfectly valid!
Return

当我从脚本中删除#warn命令时,它会按预期打印字符串,因此我不确定为什么我的变量不会被识别为全局。

为什么在启用警告时无法从函数访问全局变量?

1 个答案:

答案 0 :(得分:0)

使用#Warn时,必须将全局变量显式声明为全局变量以防止出现歧义。这可以通过三种方式之一完成。

在使用之前将变量声明为全局变量

myString := "Hello, world!"
DisplayString()
{
    global myString  ; specify this variable is global
    MsgBox %myString%
}

假设 - 函数内的全局模式

myString := "Hello, world!"
DisplayString()
{
    global  ; assume global for all variables accessed or created inside this function
    MsgBox %myString%
}

使用超全局变量

global myString := "Hello, world!" ; global declarations made outside a function
                                   ; apply to all functions by default
DisplayString()
{
    MsgBox %myString%
}

有关全局变量的更多信息,请refer to the official AutoHotkey documentation