Протокол Clojure «Наследование» - не о реализации по умолчанию - PullRequest
0 голосов
/ 20 мая 2018

У меня есть протокол A.Я хочу создать протокол B такой, что расширение типа с помощью B заставляет программиста предоставлять реализации для всех функций-членов A.

Это, конечно, просто наследование интерфейса в ядреJava.

Я видел композиционные подходы к этому.Проблема в том, что пространство имен маскируется.Если A находится в пространстве имен c.a, все методы определяются в этом пространстве имен.Используя состав, методы для B определены в пространстве имен c.b.

Предположительно, для пространства имен c.b требуется пространство имен c.a.Таким образом, переменные для методов затеняются после определения B.

Это становится проблемой, если есть другой протокол C, который наследуется от A.Что происходит, когда оба пространства имен c.b и c.c требуются в пространство имен клиента lib?Один из наборов методов vars затмевает другой, и выигрышный набор не работает с типами, которые удовлетворяют протоколу проигрыша .

Если не писать собственный макрос определения протокола и расширять макросыКак бы я подошел к этой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...