3

Smalltalkで独自のイベントを作成するにはどうすればよいですか?私は基本的に、特定のイベントが発生したときにトリガーできるソフトウェアイベントを探しています。

4

2 に答える 2

7

従来のSmalltalk(元のXEROX Parcイメージの直接派生物としてSqueakによってサポートされています)には、基本的なパブリッシュ/サブスクライブモデルがあります。オブジェクトインスタンスのプロトコルブラウザで「イベント」を探します。

最新のSmalltalkでは、Exceptionクラスとそのサブクラスを使用してcatch/throwユーザー定義イベントを使用できます。詳細については、例外のクラスドキュメントを参照してください。

クラシックイベントフレームワークのより柔軟なバージョンとして、Squeaksourceで利用可能なアナウンスフレームワークを選択することもできます。

于 2011-04-23T01:23:45.453 に答える
0

要約すると、イベントはオブザーバーパターンに基づいており、サブジェクトには選択されたイベントを監視する扶養家族がいます。

これにより、それらの間に緩い結合の関係が作成されます。

被験者とオブザーバーの両方を知っている方法での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:aFresherFloorValuefloorValue

于 2020-03-04T10:58:10.563 に答える