Scope 如何在AutoHotkey中声明热键内的局部变量?

Scope 如何在AutoHotkey中声明热键内的局部变量?,scope,autohotkey,local-variables,Scope,Autohotkey,Local Variables,TL:DR;我不能将热键中的变量声明为本地变量,这意味着temp和index可以全局访问。 我最近发现,不能从热键中声明为本地,也不能将它们用作热键中的参数 如果启用了#warn,则会出现此问题。除非我记得为每个for循环使用唯一的变量名,否则我会遇到以下错误: 警告:此局部变量与全局变量同名。(特别是:索引) 例如: #warn ^j:: index = 42 ; This *index* variable is global Return UnrelatedFunction()

TL:DR;我不能将热键中的变量声明为本地变量,这意味着
temp
index
可以全局访问。

我最近发现,不能从热键中声明为本地,也不能将它们用作热键中的参数

如果启用了
#warn
,则会出现此问题。除非我记得为每个for循环使用唯一的变量名,否则我会遇到以下错误:

警告:此局部变量与全局变量同名。(特别是:索引)

例如:

#warn

^j::
   index = 42  ; This *index* variable is global
Return

UnrelatedFunction() {
   for index in myArray {  ; This *index* variable is local
      MsgBox % myArray[index] 
   }
}
尤其是在使用导入时,这会成为一个问题,因为来自我自己脚本的变量经常与来自导入脚本的变量冲突

理想情况下,我可以将本地声明放在任何for循环之前,但如前所示,我无法在热键中执行此操作


是否可以从热键中将变量声明为本地变量?

我使用函数实现热键。函数中的变量默认具有局部作用域,除非它们声明为
global

F1::alpha(10,10)
F2::alpha(20,30)
F3::beta()


alpha(x,y)
{
   myvar := x*2 + y
}

beta()
{
   myvar := 47
}

对于在只有一个热键的脚本中命名函数,有什么建议吗?像
mainfuntion()
这样的做法是否是一种好的做法?从中,策略是以包含函数的文件的名称命名函数-这在某种程度上防止了命名空间冲突。当然,这只是重新暴露了OP所讨论的名称空间问题,只是函数名而不是变量名:)@DewiMorgan鉴于我当前的脚本最初不是作为库设计的,用下划线前缀改装我的函数会很有趣。。。
F1::alpha(10,10)
F2::alpha(20,30)
F3::beta()


alpha(x,y)
{
   myvar := x*2 + y
}

beta()
{
   myvar := 47
}