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