Как реализовать интерфейс через протоколы?
С помощью 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'
будет так же хорошо.