17
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

コードを実行すると、結果は次のようになります。

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

ドキュメントには次のように記載されています。

変数のスコープと宣言:関数内のローカル変数を除いて、すべての変数はグローバルです。つまり、それらの内容は、スクリプトのどの部分によっても読み取られたり変更されたりする可能性があります。

関数内でグローバル変数にスコープがないのはなぜですか?

4

4 に答える 4

15

グローバル変数のドキュメントは、
https ://autohotkey.com/docs/Functions.htm#Global にあります。

グローバル変数

関数内で既存のグローバル変数を参照する (または新しい変数を作成する) には、使用する前に変数をグローバルとして宣言します。例えば:

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

AHK でのグローバルの概念は、他の言語とは少し異なると思います。AHK を使用すると、変数を作成し、それをグローバルとして宣言することなく、複数のホットキーおよびサブルーチン内で使用できます。

Gv := 0

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

Action:
    Gv++
    trayTip,, % Gv
Return

f2::Msgbox, % Gv

コードの説明:

  • キーはF1、タイマーを切り替えてサブルーチンを実行します:ミリ秒Actionごと1000
  • %式を開始します。
  • on:=!onを押す onたびに variable のバイナリ値を反転します。F1
  • ?:合わせて三項演算子と呼びます。
  • on=1 の場合、遅延は1000ms に設定されます。on=0 の場合、タイマーがオンになりOffます。

オペレータは、++ 変数 Gv に 1 を加算します。

于 2012-04-18T18:54:46.953 に答える
8

これにより、作業が簡単になります。

https://www.autohotkey.com/docs/Functions.htm#SuperGlobal

スーパーグローバル変数 [v1.1.05+] : グローバル宣言が関数の外にある場合、デフォルトですべての関数に対して有効になります (強制ローカル関数を除く)。これにより、各関数で変数を再宣言する必要がなくなります。ただし、同名の関数引数やローカル変数を宣言した場合は、グローバル変数よりも優先されます。class キーワードによって作成された変数もスーパーグローバルです。

メイン スクリプトで変数をグローバルとして宣言するだけです。

global supposedlyGlobalVariable := "blah"
于 2019-02-18T11:46:05.970 に答える
-1

P.Brian、これを行うと機能します..理由が説明されていないことはわかっていますが、これが回避策になる可能性があります.

#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
于 2012-04-18T15:30:31.563 に答える