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

时间:2015-01-29 22:19:29

标签: smalltalk pharo

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

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

我是否可以将消息重定向到委托?

1 个答案:

答案 0 :(得分:5)

Smalltalk有doesNotUnderstand: aMessage,它被发送到接收器而不是其他未定义的方法。你可以覆盖它并做任何你想做的事情(例如将消息转发给另一个对象,将其记录到磁盘,......),例如:

doesNotUnderstand: aMessage 
    aMessage sendTo: self delegate.

如果你想"拦截"实际在对象上定义的消息,有两个选项:

  1. 继承并使用您自己的对象
  2. 使用method wrappers替换原始方法定义,该定义允许各种操作(将消息重定向到新接收器,执行消息前挂钩和后挂钩,防止执行包装方法等)。 / LI>