global 変数 [, 変数...]
変数 | 大域変数 |
大域(global)変数として変数を宣言する。この時、初期値は設定されないので、set命令(copy命令)で値を設定してやる必要がある。値が設定されていない変数を使おうとするとエラーになる。
ハンドラの中でのみ値が保持される通常の変数を、局所(local)変数という。
変数の定義は、命令ハンドラ、利用者定義ハンドラ(位置渡し、ラベル渡し)、スクリプトオブジェクトの定義の頭、またはスクリプトのトップレベル(あらゆるハンドラの外)で行われる。
トップレベルで宣言された大域変数は、明示的に宣言しなくても、スクリプト全体で大域変数として扱われる(例1を参照)
ハンドラ内で宣言された大域変数は、他のハンドラでは、明示的に宣言しない限り、局所変数として扱われる(例2を参照)
大域変数は、スクリプト終了後も保存される。
詳しい変数の有効範囲(scope)については、各自検証しつつ使ってほしい。
【バグ情報】
propertyで宣言した属性と名前が同じ大域変数を宣言した場合、両者の値は共有される。
バグか仕様か微妙なところだが、少なくとも仕様ミスと考えた方がいいようだ。
他にも意外な程、有効範囲が広く様々な場所に及ぶので、極力使わない方がいいのが大域変数である。
global x
on run
try
set x to x + 1
on error
set x to 1
end try
display dialog x
end run
r()
display dialog x
s()
on r()
global x
set x to 1
end r
on s()
display dialog x
end s