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

scrit object

発言者:猫の手
( Date Wednesday, April 22, 1998 08:33:14 )


 すごく基本的な話を毎度質問してしまいますが。

 script objectというのをアップルスクリプトの中に作ろうかと思っていま
す。その方が、似たような処理をさせるときに、便利なんじゃないかなと、そ
う思い立ったんですが。(常識?)JAVAを勉強したときの感覚だと、拡張性や
メンテナンスなんかがわりと楽になったように思ったのですが。(錯覚?)

 それで、実は、お伺いしたいのは、オブジェクトの呼び出し方法なんです
が。練習で、スクリプトエディタの上で書いていると、なるほどこれは便利だ
と思っているのですが、アプリケーションに仕立てようとしたときに、スクリ
プトオブジェクトをどこにおいて、どこから呼ぶのかがわからなくなってしま
いました。トップレベルにおいたとして、これを呼び出そうとすると、そうい
う変数はないぞとしかられてしまいます。どこかのハンドらの中に格納して呼
び出すというのが普通なんでしょうか。Script Object の活用法のドキュメン
トを読んだのですが、propertyとして、宣言しておく必要があるのでしょう
か。

kozka さんからのコメント
( Wednesday, April 22, 1998 10:05:50 )

スクリプトエディタの上ではちゃんと動くのですか?

トップレベルに置いても良いと思いますが、スクリプトオブジェクトより上の行に書かれたスクリプト
からはそのオブジェクトを認識してくれないようです。

田中求之 さんからのコメント
( Wednesday, April 22, 1998 16:15:21 )

Script object は、うまく使うとかなり面白いことができるのですが、バッチ処理
(マクロ)的な使い方にはちょっと合わないところがあって、私自身は、あまり使い
込んでいません。

アプリケーションの中で使う場合には、Script object を返すハンドラーを作っておく
というのが、簡単だと思います。

on makeNewObj(myDefault)
  script myAgent
    property myname : ""
    property order : ""
    to response()
      return "I'm " & myname
    end response
  end script
  
  copy myAgent to myAg
  set myname of myAg to myDefault
  return myAg
end makeNewObj

で、以下のように使うわけです

set myAgent to makeNewObj("UVJ")
tell myAgent to response()

猫の手 さんからのコメント
( Thursday, April 23, 1998 13:02:40 )

 今日は、やたらネットワークが重いのですが。

 ハンドラを置いて使うとすると、ハンドラから抜けた時点では、
スクリプトのプロパティーなどは、再度呼び出した時には
初期化されてしまいますよね。それだと、もったいないなと
思ったりしています。

 日々、勉強です。

田中求之 さんからのコメント
( Thursday, April 23, 1998 15:07:15 )

>スクリプトのプロパティーなどは、再度呼び出した時には
>初期化されてしまいますよね。

オブジェクトを定義するスクリプトと、スクリプト・オブジェクトそのものを
混同しないように。

作成したオブジェクトを保存するのはスクリプトの責任です。

猫の手 さんからのコメント
( Friday, April 24, 1998 08:30:27 )

 上の田中先生のコメントの意味が、今朝、早起きしてアップルスクリプト
Language guideを読んでいてわかりました。先生の例だと、myAgentにオブ
ジェクトをセットしているわけだから、それをどう扱うかというのは、
myAgentの責任だよということですよね。同じオブジェクトをyrAgentにセット
すれば、それはyrAgentの取り扱いになる。このところが、うまく理解できな
かったんです。どうもハンドラだとそれをおいて、返値をもらうというイメー
ジしかもてなかったものですから。

 早起きは、3文の得です。
 I got three sentences  in the early morning.

猫の手 さんからのコメント
( Friday, April 24, 1998 09:08:08 )

 小塚さん、こんにちは

 アップルスクリプトだと、ハンドラやスクリプトオブジェクトがどの行に
あっても、認識できると思うのですが。

 私が使っているSASというプログラムは、マクロを先読みしておかないと実
行できないので、プログラムが書きにくくて困ります。

kozka さんからのコメント
( Friday, April 24, 1998 12:08:39 )

ちょっと試してみてますが、

return x
script x
end script

を直接書く動きますが、ハンドラに入れて

on new()
return x
script x
end script
end new

とすると動きません。

たぶんスクリプトオブジェクトが変数と同じ扱いになっているのだと思うのですが。