Пересылка сообщений с помощью doesNotUnderstand в Smalltalk - PullRequest
4 голосов
/ 18 июня 2020

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

Я очень благодарен за помощь, с уважением!

1 Ответ

8 голосов
/ 18 июня 2020

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

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

...