为什么#include打破全局变量?

为什么#include打破全局变量?

问题描述:

我有一个简单的.ahk文件,可以在我按下Esc时重新加载当前正在运行的脚本。为什么#include打破全局变量?

; reload-hotkey.ahk 

Esc::Reload  ; reload script with Esc 

出于某种原因,导入此文件将导致全局变量来停止正常工作。

; test-file.ahk 

#Include %A_ScriptDir%\reload-hotkey.ahk ; This line causes the problem 
globalString := "Hello" 
^q:: 
    localString := "World" 
    MsgBox '%globalString% %localString'  ; Output: ' World' 
Return 

如果我删除我的#include声明,代码工作正常。

; test-file-2.ahk 

globalString := "Hello" 
^q:: 
    localString := "World" 
    MsgBox '%globalString% %localString%' ; Output: 'Hello World' 
Return 

这只会发生,如果我包括的文件包括一个热键。如果函数只包含方法或函数,我的代码将按预期工作。

仅供参考,我使用的是AutoHotkey Unicode 32位1.1.26.01。

为什么#include声明会导致全局变量无法正常工作?

变量定义必须出现在任何热键或热点字符串定义之前。

因此把变量定义放在include语句的上面。

globalString := "Hello" 
#Include %A_ScriptDir%\reload-hotkey.ahk ; This line causes the problem 

有关详细信息,请参阅Autohotkey文档中的Auto-execute Section

+0

我会添加像[CoordMode](https://autohotkey.com/docs/commands/CoordMode.htm)和[SetKeyDelay](https://autohotkey.com/docs/commands/SetKeyDelay.htm)还需要放置任何热键或热键定义之后。 –