Events Smalltalk中的事件处理(squeak)
我如何在Smalltalk中创建自己的活动?我基本上是在寻找一些特定事件发生时可以触发的软件事件。在经典的Smalltalk(由Squeak作为原始XEROX Parc映像的直接衍生产品提供支持)中,您有一个基本的发布/订阅模型。在协议浏览器中查找对象实例的“事件” 在现代Smalltalk中,您可以使用Exception类及其子类来使用catch/throw用户定义的事件。有关异常的详细信息,请参阅类文档Events Smalltalk中的事件处理(squeak),events,event-handling,smalltalk,squeak,Events,Event Handling,Smalltalk,Squeak,我如何在Smalltalk中创建自己的活动?我基本上是在寻找一些特定事件发生时可以触发的软件事件。在经典的Smalltalk(由Squeak作为原始XEROX Parc映像的直接衍生产品提供支持)中,您有一个基本的发布/订阅模型。在协议浏览器中查找对象实例的“事件” 在现代Smalltalk中,您可以使用Exception类及其子类来使用catch/throw用户定义的事件。有关异常的详细信息,请参阅类文档 您还可以选择Squeaksource中提供的Announcements框架,作为经典事件
您还可以选择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
在这种情况下,您还将让电梯
接收所选的楼层值:
但重新使用楼层值
,而不是在观察设置期间捕获的楼层值