【问题标题】:AutoHotkey warns that a local variable has the same name as a global variableAutoHotkey 警告局部变量与全局变量同名
【发布时间】:2021-03-30 00:59:50
【问题描述】:

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

此警告似乎只影响功能。从热字串访问变量不会引发任何警告。

#Warn
myString := "Hello, world!"

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

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

为什么启用警告后我不能从函数访问全局变量?

【问题讨论】:

    标签: global-variables autohotkey compiler-warnings


    【解决方案1】:

    使用#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

    【讨论】:

    • 一些澄清:#Warn 仅警告您可能出现的错误,您在函数内部使用的变量只需声明为全局变量,如果这是您想要的。消除警告的另一种可能性是将其明确定义为本地local myString := "Hello, local world!"
    • 有什么方法可以限制热键或热字符串中的变量范围?当我尝试将它们定义为本地时出现错误。
    • 不,这仅与函数有关。您可以通过热键调用函数。
    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多