2012-04-17 25 views
6
supposedlyGlobalVariable := "blah" 

ARoutine() 
{ 
    localVariable := "asdf" 
    MsgBox, The global variable value is %supposedlyGlobalVariable%. The local variable value is %localVariable%. 
} 


^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine 
ARoutine() 
return 

Eseguire il codice e il risultato è:variabile globale non ha portata globale

"The global variable value is . The local variable value is asdf." 

I documentation stati:

portata variabile e dichiarazioni: Con l'eccezione degli enti locali variabili nelle funzioni, tutte le variabili sono globali; ovvero, il loro contenuto potrebbe essere letto o modificato da qualsiasi parte dello script.

Perché la variabile globale non ha ambito all'interno della funzione?

risposta

9

La documentazione per le variabili globali può essere trovato qui:
https://autohotkey.com/docs/Functions.htm#Global

variabili globali

Per fare riferimento a una variabile globale esistente all'interno di una funzione (o creare un nuova uno), dichiarare la variabile come globale prima di utilizzarla. Ad esempio, :

LogToFile(TextToLog) 
{ 
    global LogFileName 
    FileAppend, %TextToLog%`n, %LogFileName% 
} 

Credo che il concetto di globale, con AHK, è un po 'diverso che in altre lingue. Con AHK puoi creare una variabile e usarla in più hotkey e subroutine, senza dichiararla come globale.

Gv := 0 

f1::SetTimer, Action, % (on:=!on) ? (1000) : ("Off") 

Action: 
    Gv++ 
    trayTip,, % Gv 
Return 

f2::Msgbox, % Gv 

Spiegazione di codice:

  • Il F1 chiave alterna un timer per eseguire la subroutine: Action ogni 1000 ms.
  • % inizia un'espressione.
  • on:=!on inverte il valore binario della variabile on ogni volta che si preme F1.
  • ?: insieme è chiamato operatore ternario.
  • Se acceso = 1 ritardo è impostato su 1000 ms; se acceso = 0 il timer è attivato Off.

L'operatore ++ aggiunge 1 alla variabile Gv.

+0

Questo è contro-intuitivo. Se una variabile è globale, ma non all'interno di una funzione ... allora dove è globale senza richiedere un modificatore? –

+0

@ P.Brian.Mackey Ho aggiornato la mia risposta nel tentativo di indirizzare il tuo commento. –

0

P.Brian, Funziona quando si esegue questa operazione .. lo so che non spiega perché, ma questo potrebbe essere la vostra soluzione.

#Persistent 
GlobalVariable = "blah" 
RETURN 

ARoutine: 
{ 
    localVariable := "asdf" 
    MsgBox, The global variable value is %GlobalVariable%. The local variable value is %localVariable%. 
} 
Return 

^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine 
gosub, ARoutine 
return