グローバル変数とローカル変数 [AppleScript辞書はつくれるか?]
大したことではないのだが、Applescriptでのグローバルとローカルの扱いがちょっと気になったので、実験してみることにした。
普通にこのように書けば、なんの問題もないです。
そして難なく思った通りの答えが得られます。
では、ハンドラを通して作業をさせてみよう。
これだとどうなるでしょう?
答えはわかっているとは思いますが、ハンドラからの値をreturnで返していない上、戻ったところで受け取る訳でもないわけですので、ハンドラ内での作業は個別と考えられてしまい、最終結果には反映されていません。ハンドラ内が別な変数というローカル変数として扱われていますね。
まあ、これは想定内です。
では、ハンドラ内も含めて全ての作業を結果に反映したい場合は、変数をグローバル化してやればいいのですが、
global の1行を増やすだけで、このスクリプト内全ての variable を同じ変数として扱えるようになり、結果も、
となります。
次に、滅多にやらないことなのですが、
変数をグローバル化したけど、特定のハンドラ内ではローカル変数として使いたい場合は
と local文を使えば、
と自由に作業が行えるようになります。
さて、ここからが今回の問題となる部分です。
global化された変数名を、ハンドラの引数で使用した場合です。
variable を global文でグローバル変数化した上で、引数としてまた variable に同じものを上書きしているだけの二重構造になっています。
普通に考えると、おなじ変数名の variable なのですから、グローバルな使い方ができると思うので、ハンドラ内の処理である『へ追加』が追加され、最終結果には『最初の値へ追加』となると考えられますが、
という結果になってしまいます。
このことから、ハンドラで引数を受け取る変数は強制的にローカル変数となるようです。
あまり気にしていませんでしたが、これは今まで知らずにやらかしていて、間違った値を使っている可能性が大きいですね。
まあ、変数名を個別に書き分ければ問題回避できるのですがね。
コメント 0