每次尝试从启用了#warn
的AutoHotkey函数访问全局变量时,我都会显示一条警告提示,说明我的局部变量与全局变量同名。
如果我从hotstring访问该变量,代码将按预期运行而不会发出任何警告。
#Warn
myString := "Hello, world!"
DisplayString() {
MsgBox %myString% ; Warning: local variable
}
^j::
MsgBox, %myString% ; Perfectly valid!
Return
当我从脚本中删除#warn
命令时,它会按预期打印字符串,因此我不确定为什么我的变量不会被识别为全局。
为什么在启用警告时无法从函数访问全局变量?
答案 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。