Smalltalk中不理解的消息转发

Smalltalk中不理解的消息转发,smalltalk,pharo,Smalltalk,Pharo,我有一个关于在smalltalk中重新定义消息doesNotUnderstand:的问题。我想做的是将一个对象接收到的所有未被理解的消息转发给它所知道的另一个对象。我的问题来自这样一个事实,即两个对象(接收方和转发的对象)都具有由超类继承的相同协议,并且当消息未被对象的特定协议理解时,但如果消息被继承的协议理解,它执行继承的消息,而不是doesNotUnderstand:(因此消息不会被转发,并且调用了超类消息) 我真的很感谢你的帮助,问候 据我所知,在这种情况下,您希望转发消息,但转发消息的人

我有一个关于在smalltalk中重新定义消息
doesNotUnderstand:
的问题。我想做的是将一个对象接收到的所有未被理解的消息转发给它所知道的另一个对象。我的问题来自这样一个事实,即两个对象(接收方和转发的对象)都具有由超类继承的相同协议,并且当消息未被对象的特定协议理解时,但如果消息被继承的协议理解,它执行继承的消息,而不是
doesNotUnderstand:
(因此消息不会被转发,并且调用了超类消息)


我真的很感谢你的帮助,问候

据我所知,在这种情况下,您希望转发消息,但转发消息的人(我们称之为代理对象)可以理解它,因此
不理解:
在代理中没有被调用


您有两种可能的解决方案。首先(一般来说),代理对象应该继承自
ProtoObject
,以避免继承任何默认行为。但是,如果这不是真正的代理对象(基本上传递所有内容),那么您需要覆盖应该转发的消息,并直接调用
doenUnderstand:
(或您的转发代码)。

谢谢,您的回答帮助了我。我所做的是一个decorator模式设计,我希望如果包装器对象不理解来自其自身上下文的消息(不管继承的消息如何),它会将消息转发给包装器对象,并定义它是否能够解析它。最后,正如您所提到的,我直接使用了转发,重新实现了需要从包装器转发的消息。问候!重新实现并不意味着:有趣但危险。问题:为什么不实现您不理解的消息并将它们委托给您知道它们理解的对象?如果您知道将发送什么消息,那么您只能实现这些消息。如果您不知道将发送什么消息,则使用doesNotUnderstand:。