Nano Hash - криптовалюты, майнинг, программирование

Переадресация сообщений с помощью DoesNotUnderstand в Smalltalk

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

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

18.06.2020

Ответы:


1

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

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

18.06.2020
  • Спасибо, ваш ответ мне помог. То, что я делал, было дизайном шаблона декоратора, где я хотел, чтобы, если объект-оболочка не понимал сообщение из своего собственного контекста (независимо от унаследованных сообщений), он пересылал сообщение обернутому объекту, и он определял, будет ли это это может решить это. В конце концов, я использовал переадресацию напрямую, как вы упомянули, повторно реализовал сообщения, которые мне нужно было пересылать из оболочки. Приветствие! 25.06.2020
  • Повторная реализация DoesNotUnderstand: интересна, но опасна. Вопрос: Почему бы вам просто не реализовать сообщения, которые вы не понимаете, и делегировать их объектам, которые, как вы знаете, понимают? 08.07.2020
  • Если вы знаете, какие сообщения будут отправлены, вы можете реализовать только эти сообщения. Если вы не знаете, какие сообщения будут отправлены, используйте doNotUnderstand:. 10.07.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..