Events Smalltalk中的事件处理(squeak)

Events Smalltalk中的事件处理(squeak),events,event-handling,smalltalk,squeak,Events,Event Handling,Smalltalk,Squeak,我如何在Smalltalk中创建自己的活动?我基本上是在寻找一些特定事件发生时可以触发的软件事件。在经典的Smalltalk(由Squeak作为原始XEROX Parc映像的直接衍生产品提供支持)中,您有一个基本的发布/订阅模型。在协议浏览器中查找对象实例的“事件” 在现代Smalltalk中,您可以使用Exception类及其子类来使用catch/throw用户定义的事件。有关异常的详细信息,请参阅类文档 您还可以选择Squeaksource中提供的Announcements框架,作为经典事件

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

在经典的Smalltalk(由Squeak作为原始XEROX Parc映像的直接衍生产品提供支持)中,您有一个基本的发布/订阅模型。在协议浏览器中查找对象实例的“事件”

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


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

概括地说,事件基于主体的从属对象在其上观察选定事件的位置

这就在他们之间建立了一种关系

在Squeak或Pharo中,通过某种既了解主体又了解观察者的方法,您可以这样做:

观察

elevatorPanel when: #openDoorClicked send: #onOpenDoorClicked to: elevator
事件触发

另一方面,使用自立式升降器面板:

self triggerEvent: #openDoorClicked
您将有
电梯
接收
onpendoorclicked
消息

类似地,您也可以使用参数:

elevatorPanel when: #floorSelected: send: #onFloorSelected: to: elevator with: floorNumber
在这种情况下,您可以通过两种方式触发,首先

self triggerEvent: #floorSelected:
Wich将使
电梯
观察者实例接收
楼层选择:
消息,并将
楼层编号
作为参数

第二,在触发时覆盖该值

self triggerEvent: #floorSelected: with: aFresherFloorValue
在这种情况下,您还将让
电梯
接收所选的
楼层值:
但重新使用
楼层值
,而不是在观察设置期间捕获的
楼层值