print ハンドラ

どれだけの人が知っているのでしょうか?AppleScript には、run ハンドラや idle ハンドラ、reopen ハンドラ、quit ハンドラといった標準で実装しているいくつかのハンドラがあります。

これらのハンドラの中に print というハンドラがあります。print という名前ですので印刷を行うのかと思いますが、違います。print ハンドラはスクリプトアプリケーション同士で通信を行うハンドラです。たとえば、以下のようなスクリプトを「実行後、自動的に終了しない」にチェックを入れてアプリケーションとして保存します。

Script Editor で開く

property counter : 0

on idle
    set counter to counter + 1

    return 10
end idle

on print
    return counter as Unicode text
end print

このアプリケーションを「Counter」という名前で保存したとします。このアプリケーションを起動させておきます。そして、以下のようなスクリプトを実行します。

Script Editor で開く

tell application "Counter"
    print
end tell

Counter アプリケーションは、idle ハンドラで 10 秒ごとに counter の値を増やしていきます。ですので、10 秒ごとに増えた値が結果として返ってきます。また、print ハンドラには引数を渡すことができるので次のようなこともできます。先ほどの Counter アプリケーションを次のように修正します。

Script Editor で開く

property counter : 0
property myName : "Counter"

on idle
    set counter to counter + 1

    return 10
end idle

on print {nameOption, greetingOption}
    if nameOption and greetingOption then
        return "Hello, my name is " & myName & ". " & counter & " counted."
    else if nameOption and not greetingOption then
        return "My name is " & myName & ". " & counter & " counted."
    else if not nameOption and greetingOption then
        return "Hello, " & counter & " counted."
    else
        return counter as Unicode text
    end if
end print

次のように呼び出します。

Script Editor で開く

tell application "Counter"
    print {false, true}
end tell

だからどうだというサンプルなのですが。print ハンドラは、idle ハンドラのようにアプリケーションとして保存し、かつ、実行後終了しない常駐アプリケーション形式でないと使えないハンドラです。スクリプト間通信を行いたいときに手軽に使えるので使い道があると思うのですが、いまだかって print ハンドラが入ったスクリプトを見たことがなかったり...。

0 件のコメント :

コメントを投稿