このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

load script fileするとき

発言者:猫の手
( Date Wednesday, August 27, 1997 09:33:23 )


 いつもお世話になっています。

 ついに、私のスクリプトも32キロを超えてしまったので、
load script fileで対応しようと思っています。

 そこで、質問なんですが、
 例えば、cgiをおいてあるフォルダのパスをthisFldrというpropertyに
起動時に格納するという方法を田中先生はとっていらして、私も、それを
まねさせていただいているのですが、このthisFldrというのをこのロード
してくるスクリプトファイルに渡す方法はないのでしょうか。

 それと、ロードするファイルのパスを起動時に取得する方法はないので
しょうか。プログラムの中に、できるだけ、こういう環境依存性の高い
ものは書き込みたくないと思いますので。

 是非、ご教授下さい。

田中求之 さんからのコメント
( Wednesday, August 27, 1997 13:57:04 )

読み込む側のスクリプトと同じフォルダーに入れておくのであれば、起動時に得た
thisFldr のパスをもとに、それぞれのスクリプトファイルのパスを割り出して
load script すればいいわけです。(私はコンパイル時に読み込むようにしてますが)


thisFldr をロードしたスクリプトに渡す方法としては、

1:thisFldr をグローバル変数にしておく

2:それぞれのスクリプトオブジェクト(load されるスクリプト)で、
読み込む方のスクリプトを parent に指定する。

3:必要なハンドラーに対しては、パラメーターでちゃんと渡すようにする

といった方法が考えられます。3が一番問題が少ないでしょうね。

2の場合は、スクリプトの継承によって、プロパティやハンドラーが子供の側でも
利用できるようになります。


なお、起動時にスクリプト・オブジェクトを load する方法をとると、スクリプトの
終了時(アプレットの終了時)に、Out of Memory によるエラーが起きやすくなる
ようです。

猫の手 さんからのコメント
( Wednesday, September 03, 1997 07:56:04 )

 せっかくコメントを頂いたのに、そのままにしていて、申しわけありません。

 田中さん、コメントありがとうございました。
 取りあえずは、loadされる方にもthisFldrを書いておくことにしました。

 ところで、一つ教えていただきたいのですが、
 propertyとglobal変数とは、どう違うのでしょうか。

田中求之 さんからのコメント
( Wednesday, September 03, 1997 16:06:15 )

>propertyとglobal変数とは、どう違うのでしょうか。

根本的に違うものなんですが、確かに値(データ)を保持しておくものという点では
同じように思えるかもしれませんね(スクリプトで自分で定義する property に
関しては、宣言なしで使えるグローバル変数のように思えるかもしれません)。

property は、その名の通り属性ですから、必ずどれかのオブジェクトに帰属します。

また、アプリケーション(アプレット)の property は、アプリケーションを終了
しても記憶(保持)されます。

細かな説明をし始めると切りがないので、以下のようなスクリプトのアプリケーションを
複数作って、遊んでみてください。

----

property adana : ""

on hello()
  if adana = "" then
    return "Please give me adana!"
  else
    return "Hi, I'm " & adana
  end if
end hello

----

このスクリプトのアプリケーションを StayOpen でいくつも走らせておいて
(それぞれ名前を変えておきます。たとえば、"one", "two", ... てな具合)

adana of application "one"

とか

tell application "one" to hello()

で、adana をつけてやるために、

set adana of application "one" to "太郎"

てなことを、対象にするアプリケーションを切り替えたり、色々やってみて
ください。

それぞれのアプリケーションが、adana という名前で、それぞれに固有の値を
持つのだということがおわかりいただけると思います。