2017-08-30 230 views
1

TL:DR;我无法将热键内的变量声明为本地,这意味着tempindex可以全局访问。如何在AutoHotkey中的快捷键中声明局部变量?

我最近发现local variables无法在热键内声明为本地,或者如果它们在for-loop中用作参数。

^j:: 
    local temp = Hello, world! ; Error: This line does not contain a recognized action 
Return 

SampleFunction() { 
    for local temp in myArray { ; Error: Variable name contains an illegal character 
     ; do stuff 
    } 
} 

这成为启用#warn的问题。使用进口时

#warn 

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

UnrelatedFunction() { 
    for index in myArray { ; This *index* variable is local 
     MsgBox % myArray[index] 
    } 
} 

这尤其成为一个问题,因为:除非我记得使用唯一的变量名称为我的每一个for循环中,我遇到了以下错误:

Warning: This local variable has same name as a global variable. (Specifically: index)

例如我自己的脚本中的变量经常与我导入的脚本中的变量冲突。

理想情况下,我可以在任何for-loops之前放置一个本地声明,但如前所示,我无法在热键中执行此操作。

是否可以在热键内声明一个变量为local?

回答

3

我实现了我的热键功能。函数中的变量默认具有本地范围,除非声明为global

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


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

beta() 
{ 
    myvar := 47 
} 
+0

任何有关只使用一个热键的脚本命名函数的建议?像MainFucntion()这样的东西会不会成为好习惯? –

+1

从https://autohotkey.com/docs/Functions.htm#lib开始,策略是在包含它的文件之后命名该函数 - 这可以防止(有点)命名空间冲突。当然,这只是重新暴露了OP正在讨论的名称空间问题,只是用函数名称而不是变量名称:) –

+0

@DewiMorgan由于我当前的脚本最初并不是作为库设计的,因此改进了我的功能下划线前缀将会很有趣... –