SSブログ

グローバル変数とローカル変数 [AppleScript辞書はつくれるか?]

大したことではないのだが、Applescriptでのグローバルとローカルの扱いがちょっと気になったので、実験してみることにした。


 image1-1.jpg


 


普通にこのように書けば、なんの問題もないです。


 image1-2.jpg


そして難なく思った通りの答えが得られます。


 


では、ハンドラを通して作業をさせてみよう。


 image2-1.jpg


これだとどうなるでしょう?


 image2-2.jpg


答えはわかっているとは思いますが、ハンドラからの値をreturnで返していない上戻ったところで受け取る訳でもないわけですので、ハンドラ内での作業は個別と考えられてしまい、最終結果には反映されていません。ハンドラ内が別な変数というローカル変数として扱われていますね。


まあ、これは想定内です。


 


では、ハンドラ内も含めて全ての作業を結果に反映したい場合は、変数をグローバル化してやればいいのですが、


 image3-1.jpg


global の1行を増やすだけで、このスクリプト内全ての variable を同じ変数として扱えるようになり、結果も、


 image3-2.jpg


となります。


 


次に、滅多にやらないことなのですが、


変数をグローバル化したけど、特定のハンドラ内ではローカル変数として使いたい場合は


 image4-1.jpg


と local文を使えば、


 image4-2.jpg


と自由に作業が行えるようになります。


 


さて、ここからが今回の問題となる部分です。


global化された変数名を、ハンドラの引数で使用した場合です。


 image5-1.jpg


variable を global文でグローバル変数化した上で、引数としてまた variable に同じものを上書きしているだけの二重構造になっています。


普通に考えると、おなじ変数名の variable なのですから、グローバルな使い方ができると思うので、ハンドラ内の処理である『へ追加』が追加され、最終結果には『最初の値へ追加』となると考えられますが、


 image5-2.jpg


という結果になってしまいます。


 


このことから、ハンドラで引数を受け取る変数は強制的にローカル変数となるようです。


あまり気にしていませんでしたが、これは今まで知らずにやらかしていて、間違った値を使っている可能性が大きいですね。


 


まあ、変数名を個別に書き分ければ問題回避できるのですがね。


 


nice!(1)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。