Smalltalk(squeak)中的事件处理

问题描述 投票:3回答:2

如何在Smalltalk中创建自己的事件?我基本上是在寻找某些特定事件发生时可以触发的软件事件。

events event-handling smalltalk squeak
2个回答
7
投票

在经典的Smalltalk中(由Squeak支持,是原始XEROX Parc图像的直接派生),您具有基本的发布/订阅模型。在协议浏览器中查找对象实例的“事件”。

在现代Smalltalk中,您可以使用Exception类及其子类来使用catch / throw用户定义的事件。有关详细信息,请参见类文档中的Exception。

您还可以选择Squeaksource中提供的Announcements框架,作为经典事件框架的更灵活的版本。


0
投票

概括地说,事件是基于Observer Pattern的,其中主题具有依赖项并观察到选定的事件

这将在它们之间创建一个loose coupling的关系。

在Squeak或Pharo中,通过某种既了解对象又了解对象的方法,您会像这样:

观察

elevatorPanel when: #openDoorClicked send: #onOpenDoorClicked to: elevator

事件触发

另一方面,以自我为电梯面板:

self triggerEvent: #openDoorClicked

然后您将让elevator收到onOpenDoorClicked消息。

类似地,您可以使用参数来做到这一点:

elevatorPanel when: #floorSelected: send: #onFloorSelected: to: elevator with: floorNumber

在这种情况下,您可以通过两种方式触发,第一种

self triggerEvent: #floorSelected:

将使elevator观察者实例接收以onFloorSelected:作为参数的floorNumber消息。

第二,在触发时覆盖该值

self triggerEvent: #floorSelected: with: aFresherFloorValue

在这种情况下,您还将让elevator接收onFloorSelected:,但要带有aFresherFloorValue,而不是在观察设置过程中捕获的floorValue

© www.soinside.com 2019 - 2024. All rights reserved.