属性をまとめて扱う

オブジェクトとレコード

 スクリプトオブジェクトの属性は、レコードの属性と同じように扱うことができます。
 詳しくは「値をレコードでまとめる」を参照して下さい。以上。
 では、あまりに手抜きなので、一応サンプルをまとめておきます。

まとめて代入

 まず、属性に値を一気に代入する方法を考えます。
 以下のスクリプトは単にx,y,zという変数に値を代入する結果となり、CoordinatesObjの属性に変化はありません。

script CoordinatesObj
	property x : 1
	property y : 2
	property z : 3
end script

tell CoordinatesObj to set {x, y, z} to {4, 1, -1}

{x, y, z} of CoordinatesObj
--> {1, 2, 3}

 既に定義されている属性の名称(所謂、予約語)を使うと、代入可能になりますが、使わないようにした方が無難でしょう。

script ObjX
	property length : 1
	property time : 2
	property day : 3
end script

tell ObjX to set {length, time, day} to {4, 1, -1}

{length, time, day} of ObjX
--> {4, 1, -1}

 以下レコードと一緒。

まとめて取り出す

 代入先にレコードの各属性がある場合は、まとめて代入する事はできませんでしたが、逆に代入の元になる方であれば、以下のように書く事で、まとめて代入する事ができます。

script CoordinatesObj
	property x : 1
	property y : 2
	property z : 3
end script

set {x1, y1, z1} to {x, y, z} of CoordinatesObj -- tell CoordinatesObj to set {x1, y1, z1} to {x, y, z}では、動かない

{x1, y1, z1}
--> {1, 2, 3}

 こんな感じで、まるっきりレコードと一緒です。
 どうも、AppleScriptはレコードを拡張してスクリプトオブジェクトを定義しているようです。


2002-01-08