Smalltalkで独自のイベントを作成するにはどうすればよいですか?私は基本的に、特定のイベントが発生したときにトリガーできるソフトウェアイベントを探しています。
2 に答える
従来のSmalltalk(元のXEROX Parcイメージの直接派生物としてSqueakによってサポートされています)には、基本的なパブリッシュ/サブスクライブモデルがあります。オブジェクトインスタンスのプロトコルブラウザで「イベント」を探します。
最新のSmalltalkでは、Exceptionクラスとそのサブクラスを使用してcatch/throwユーザー定義イベントを使用できます。詳細については、例外のクラスドキュメントを参照してください。
クラシックイベントフレームワークのより柔軟なバージョンとして、Squeaksourceで利用可能なアナウンスフレームワークを選択することもできます。
要約すると、イベントはオブザーバーパターンに基づいており、サブジェクトには選択されたイベントを監視する扶養家族がいます。
これにより、それらの間に緩い結合の関係が作成されます。
被験者とオブザーバーの両方を知っている方法でのSqueakまたはPharoでは、次のようにします。
観察
elevatorPanel when: #openDoorClicked send: #onOpenDoorClicked to: elevator
イベントのトリガー
一方、自己がelevatorPanelである場合:
self triggerEvent: #openDoorClicked
そして、あなたはメッセージをelevator
受け取るでしょう。onOpenDoorClicked
同様に、引数を使用してそれを行うことができます。
elevatorPanel when: #floorSelected: send: #onFloorSelected: to: elevator with: floorNumber
この場合、最初に2つの方法でトリガーできます。
self triggerEvent: #floorSelected:
Wichは、引数としてメッセージelevator
を受信するオブザーバーインスタンスを作成します。onFloorSelected:
floorNumber
そして第二に、トリガー時にその値をオーバーライドします
self triggerEvent: #floorSelected: with: aFresherFloorValue
この場合、観測セットアップ中にキャプチャされたものではなく、elevator
受信するものもあります。onFloorSelected:
aFresherFloorValue
floorValue