2010-04-12T20:14:16+09:00

AppleScript のハンドラをハンドラの引数/ローカル変数に渡す

前回に引き続き、AppleScript のハンドラで遊んでみる。ハンドラをハンドラの変数やローカル変数に渡して、無理矢理実行させてみる。ちなみに、こんなこと真似しないでくださいね。

AppleScript のハンドラはローカル変数やハンドラの引数に与えることはできるけど、実行しようとするとエラーが起きる。

on msg()
return "hello"
end msg

on main(a_handler)
a_handler() -- error !!
end main

main(msg)

でも、こんな風に、スクリプトオブジェクトの中に収めてやれば、実行できちゃうぜ。ハンドラは所属しているスクリプトオブジェクトをはっきりさせてやれば、実行できちゃうようだ。

property _msg : "hello"
on msg()
return my _msg
end msg

on main(a_handler)
script
property _msg : "in main"
property h : a_handler
h()
end script
run result
end main

main(msg) -- result : "in main"

でも、こんなことするぐらいなら、ハンドラじゃなくてスクリプトオブジェクトをハンドラの引数に渡しなさいよ、ということになる。参照する property も違ってきちゃうしね。

ちなみに、ハンドラの変数じゃなくてローカル変数の場合でも同じことです。例えば、

property _msg : "hello"
on msg()
return my _msg
end msg

on main()
set a_handler to msg
script
property _msg : "in main"
property h : a_handler
h()
end script
run result
end main

main() -- result : "in main"

というように。