supposedlyGlobalVariable := "blah"
ARoutine()
{
localVariable := "asdf"
MsgBox, The global variable value is %supposedlyGlobalVariable%. The local variable value is %localVariable%.
}
^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine
ARoutine()
return
运行代码,结果为:
"The global variable value is . The local variable value is asdf."
变量范围和声明:除局部变量外 在函数中,所有变量都是全局的;也就是说,他们的内容可能是 由任何部分脚本读取或更改。
为什么我的全局变量在函数中没有范围?
答案 0 :(得分:9)
全局变量的文档可以在这里找到:
https://autohotkey.com/docs/Functions.htm#Global
全局变量
引用函数内的现有全局变量(或创建一个 new one),在使用之前将变量声明为全局变量。对于 例如:
LogToFile(TextToLog)
{
global LogFileName
FileAppend, %TextToLog%`n, %LogFileName%
}
我认为AHK的全球概念与其他语言略有不同。使用AHK,您可以创建一个变量并在多个热键和子例程中使用它,而无需将其声明为全局。
Gv := 0
f1::SetTimer, Action, % (on:=!on) ? (1000) : ("Off")
Action:
Gv++
trayTip,, % Gv
Return
f2::Msgbox, % Gv
代码解释:
Action
每1000
ms。 %
开始表达。 on:=!on
都会反转变量on
的二进制值。 ?:
在一起称为三元运算符。 1000
ms;当on = 0时,计时器转为Off
。 ++
运算符将1添加到变量Gv。
答案 1 :(得分:2)
这使事情变得容易:
https://www.autohotkey.com/docs/Functions.htm#SuperGlobal
超全局变量[v1.1.05 +] :如果出现全局声明 在任何功能之外,默认情况下它将对所有功能生效 (不包括局部力功能)。这样避免了需要重新声明 每个函数中的变量。但是,如果函数参数或 声明具有相同名称的局部变量,它具有优先权 在全局变量上。由class关键字创建的变量是 也是超全球的。
只需在主脚本中将变量声明为全局变量即可:
global supposedlyGlobalVariable := "blah"
答案 2 :(得分:-1)
P.Brian,当你这样做时它会起作用..我知道它不能解释原因,但这可能是你的解决方法。
#Persistent
GlobalVariable = "blah"
RETURN
ARoutine:
{
localVariable := "asdf"
MsgBox, The global variable value is %GlobalVariable%. The local variable value is %localVariable%.
}
Return
^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine
gosub, ARoutine
return
答案 3 :(得分:-1)
您只需要在函数内部将变量声明为全局变量
a