Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)



Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)?

在 Objective-C 中有一个 forwardInvocation:它在抛出异常之前被调用,这样你就可以对收到的消息做一些事情,而对它一无所知。

Smalltalk 中是否有类似的东西,我可以将消息重定向到代表吗?

Smalltalk有doesNotUnderstand: aMessage它被发送到接收者,而不是一个未定义的方法。您可以覆盖它并执行任何您想要的操作(例如,将消息转发到另一个对象,将其记录到磁盘等),例如:

doesNotUnderstand: aMessage 
    aMessage sendTo: self delegate.

如果要"截获"对象上实际定义的消息,则有两种选择:

  1. 子类化和使用自己的对象
  2. 使用方法包装
  3. 器替换原始方法定义,它允许各种操作(将消息重定向到新的接收器,执行消息前和消息后钩子,阻止包装方法的执行等)。

最新更新