У меня был запрос о переопределении сообщения doesNotUnderstand:
в smalltalk. Что я хочу сделать, так это переадресовать все сообщения, полученные объектом, который не понят, другому объекту, который он знает. Моя проблема возникает из-за того, что оба объекта (как получатель, так и тот, который пересылает) имеют один и тот же протокол, унаследованный суперклассом, и когда сообщение не понимается конкретным протоколом объекта, но если оно понимается унаследованным протокол, он выполняет унаследованное сообщение, а не doesNotUnderstand:
(поэтому сообщение не пересылается и вызывается сообщение суперкласса).
Я очень ценю помощь, привет!
1 ответ
Насколько я понимаю, у вас есть ситуация, в которой вы хотите переслать сообщение, но это понимает тот, кто пересылает (мы называем это объектом прокси ), поэтому doesNotUnderstand:
не вызывается в прокси.
У вас есть два возможных решения. Во-первых (и вообще) прокси-объект должен наследовать от ProtoObject
, чтобы избежать наследования любого поведения по умолчанию. Но если это не настоящий прокси-объект (который передает практически все), тогда вам нужно переопределить сообщения, которые должны быть переадресованы, и вызвать doesNotUnderstand:
(или ваш код пересылки) напрямую.
Похожие вопросы
Новые вопросы
smalltalk
Smalltalk - один из старейших объектно-ориентированных языков программирования. Это начало многих аспектов, которые современные разработчики принимают как должное: Виртуальные машины (Smalltalk - это интерпретируемый язык) Иды Чистый объектный подход (без примитивов или ключевых слов вообще) Закрытия (называемые блоками) Изображение (то есть не основанный на файлах язык) Расширенные методы отладки (остановка программ на лету, проверка, написание или изменение кода на лету)