Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)?
Pharo Smalltalk - Message forwarding, is it possible to intercept a message and redirect it to another Object (instance)?
Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)?
在 Objective-C 中有 forwardInvocation:它在抛出异常之前被调用,因此您可以对收到的消息做一些事情,而您对此一无所知。
Smalltalk 中是否有类似的东西,我可以将消息重定向到委托吗?
Smalltalk 有 doesNotUnderstand: aMessage
,它被发送到接收方以代替其他未定义的方法。你可以覆盖它并做任何你想做的事情(例如将消息转发到另一个对象,将其记录到磁盘,...),例如:
doesNotUnderstand: aMessage
aMessage sendTo: self delegate.
如果你想 "intercept" 实际定义在一个对象上的消息,你有两个选择:
- 子类化并使用您自己的对象
- 使用method wrappers替换原来的方法定义,它允许各种操作(将消息重定向到新的接收者,执行pre-和post-message-hooks,防止包装的执行方法等)。
Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)?
在 Objective-C 中有 forwardInvocation:它在抛出异常之前被调用,因此您可以对收到的消息做一些事情,而您对此一无所知。
Smalltalk 中是否有类似的东西,我可以将消息重定向到委托吗?
Smalltalk 有 doesNotUnderstand: aMessage
,它被发送到接收方以代替其他未定义的方法。你可以覆盖它并做任何你想做的事情(例如将消息转发到另一个对象,将其记录到磁盘,...),例如:
doesNotUnderstand: aMessage
aMessage sendTo: self delegate.
如果你想 "intercept" 实际定义在一个对象上的消息,你有两个选择:
- 子类化并使用您自己的对象
- 使用method wrappers替换原来的方法定义,它允许各种操作(将消息重定向到新的接收者,执行pre-和post-message-hooks,防止包装的执行方法等)。