2017-08-30 234 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由於我當前的腳本最初並不是作爲庫設計的,因此改進了我的功能下劃線前綴將會很有趣... –