Как реализовать интерфейс через протоколы?

С помощью extend-protocolпротокол P может обеспечить реализацию по умолчанию для всего, что реализует интерфейс I, Это по сути учит Iделать новые вещи. Если мы хотим, чтобы тип или запись обеспечивали функциональность I нам все еще нужно расширить их I,

Есть ли способ указать I поведение (это методы) с точки зрения Pповедение?

Чего я на самом деле пытаюсь достичь

Мой протокол P (который как поток) имеет (seq [this] [this timeout-value]) обеспечить последовательный доступ. Вторая задача - вернуть специальное значение, если поток истек. (Завершение последовательности может привести к путанице.)

P также имеет (close [this]),

Я хотел бы объекты, которые расширяются P быть пригодным для использования в clojure.core/seq (быть Sequable) а также реализовать java.io.Closeable, Один из способов сделать это - удалить эти методы из P и просто реализовать Sequable & Closeable в пределах типа / записи. Но потом, когда кто-то вручает мне P не может быть уверен, что он может быть закрыт или seqредактор Назовите меня объектно-ориентированным, но P extends I,

Находясь в поиске

  • Это невозможно (пока).
  • Это можно сделать с помощью этого кода...
  • Он может быть переработан для достижения аналогичного эффекта...

Если P"s seq множественная арность является проблемой, seq & seq' будет так же хорошо.

0 ответов

Другие вопросы по тегам