在 Smalltalk 中使用 dosNotUnderstand 转发消息

Iya*_*ael 4 smalltalk pharo

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

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

Jam*_*ter 8

据我了解,您有一种情况,您想转发一条消息,但转发的消息(我们称之为代理对象)可以理解,因此doesNotUnderstand:没有在代理中被调用。

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

  • 谢谢你,你的回答对我很有帮助。我正在做的是装饰器模式设计,我希望如果包装对象不理解来自其自身上下文的消息(无论继承的消息),它会将消息转发到包装对象,并定义是否它可以解决它。最后,我像您提到的那样直接使用转发,重新实现了我需要从包装器转发的消息。问候! (2认同)