У меня был запрос о переопределении сообщения doesNotUnderstand: в smalltalk. Что я хочу сделать, так это переадресовать все сообщения, полученные объектом, который не понят, другому объекту, который он знает. Моя проблема возникает из-за того, что оба объекта (как получатель, так и тот, который пересылает) имеют один и тот же протокол, унаследованный суперклассом, и когда сообщение не понимается конкретным протоколом объекта, но если оно понимается унаследованным протокол, он выполняет унаследованное сообщение, а не doesNotUnderstand: (поэтому сообщение не пересылается и вызывается сообщение суперкласса).

Я очень ценю помощь, привет!

4
Iyael 18 Июн 2020 в 19:15

1 ответ

Лучший ответ

Насколько я понимаю, у вас есть ситуация, в которой вы хотите переслать сообщение, но это понимает тот, кто пересылает (мы называем это объектом прокси ), поэтому doesNotUnderstand: не вызывается в прокси.

У вас есть два возможных решения. Во-первых (и вообще) прокси-объект должен наследовать от ProtoObject, чтобы избежать наследования любого поведения по умолчанию. Но если это не настоящий прокси-объект (который передает практически все), тогда вам нужно переопределить сообщения, которые должны быть переадресованы, и вызвать doesNotUnderstand: (или ваш код пересылки) напрямую.

8
James Foster 18 Июн 2020 в 16:42