在 Smalltalk 中使用 doesNotUnderstand 进行消息转发

Message forwarding with doesNotUnderstand in Smalltalk

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

非常感谢您的帮助,问候!

据我了解,你有这样一种情况,你想转发一条消息,但转发的人可以理解它(我们称之为 proxy 对象)所以doesNotUnderstand: 未在代理中调用。

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