全局变量没有全局范围

P.B*_*key 13 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
Run Code Online (Sandbox Code Playgroud)

运行代码,结果是:

"The global variable value is .  The local variable value is asdf."
Run Code Online (Sandbox Code Playgroud)

文件规定:

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

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

Hon*_*Abe 10

全局变量的文档可以在这里找到:https:
//autohotkey.com/docs/Functions.htm#Global

全局变量

要引用函数内的现有全局变量(或创建新变量),请在使用之前将变量声明为全局变量.例如:

LogToFile(TextToLog)
{
    global LogFileName
    FileAppend, %TextToLog%`n, %LogFileName%
}
Run Code Online (Sandbox Code Playgroud)

我相信AHK的全球概念与其他语言略有不同.使用AHK,您可以创建变量并在多个热键和子例程中使用它,而无需将其声明为全局变量.

Gv := 0

f1::SetTimer, Action, % (on:=!on) ? (1000) : ("Off")

Action:
    Gv++
    trayTip,, % Gv
Return

f2::Msgbox, % Gv
Run Code Online (Sandbox Code Playgroud)

解释代码:

  • F1键切换定时器运行子程序:Action1000毫秒.
  • % 开始表达.
  • on:=!onon每次F1按下时都会反转变量的二进制值.
  • ?: 一起被称为三元运算符.
  • 当on = 1时,延迟设置为1000ms; 当开启= 0时,定时器开启Off.

++ 操作者加1可变提起笔.


Yan*_*ane 5

这使事情变得容易:

https://www.autohotkey.com/docs/Functions.htm#SuperGlobal

超全局变量[v1.1.05 +]:如果全局声明出现在任何函数之外,则默认情况下它将对所有函数生效(不包括强制局部函数)。这样避免了在每个函数中重新声明变量的需要。但是,如果声明了具有相同名称的函数参数或局部变量,则它优先于全局变量。由class关键字创建的变量也是超全局变量。

只需在主脚本中将变量声明为全局变量即可:

global supposedlyGlobalVariable := "blah"
Run Code Online (Sandbox Code Playgroud)