全局变量没有全局范围

时间:2012-04-17 20:47:15

标签: autohotkey

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."

documentation州:

  

变量范围和声明:除局部变量外   在函数中,所有变量都是全局的;也就是说,他们的内容可能是   由任何部分脚本读取或更改。

为什么我的全局变量在函数中没有范围?

4 个答案:

答案 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

代码解释:

  • F1 键切换计时器以运行子程序:Action1000 ms。
  • %开始表达。
  • 每次按 F1 时,
  • on:=!on都会反转变量on的二进制值。
  • ?:在一起称为三元运算符。
  • 当on = 1时,延迟设置为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