ハンドラという値

handlerクラス

 普段はほとんど気にする事も無いのですが、ハンドラという値が存在します。
 この値は、ハンドラを定義したときに自動的に「ハンドラ名と同じ名前の変数」に代入されます。
 以下のスクリプトを実行すると、その値のクラスは「handler」である事が確認できます。

class of x

on x()
end x

 この値は、ハンドラの内容が記録された部分への参照であると考えられ、この値が入った変数にカッコや、その他の引数を受け渡す書式を記述する事で、利用者定義命令として機能します(普段、ハンドラを使うときにやっていることです)
 値ですから、当然他の変数へ代入する事もできます。
 以下のスクリプトではyというハンドラは定義していないのに、beepが実行されます。

set y to x
y()

on x()
	beep
end x

演算子を適用する

 例えば=や/=で値同士の比較を行う事もできますし、&でリストに結合したりもできます。

x & y -- これはハンドラのリストになる
x = y -- これはfalse
set z to x
x = z -- これはtrue

on x()
end x

on y()
end y

リストの項目にする

 リストの項目にhandlerクラスの値を設定するのは、わりと使いやすいテクニックです。

set h to some item of {X, Y}
h()

on x()
	beep
end x

on y()
	display dialog "ハンドラyです"
end y

2000-05-13 -2000-05-22