В этом вопросе возникла проблема, которую можно решить, изменив попытку использования параметра универсального типа в связанный тип. Это вызвало вопрос "Почему ассоциированный тип здесь более уместен?", Что заставило меня захотеть узнать больше.
RFC, который ввел связанные типы, гласит:
В этом RFC разъясняются особенности соответствия:
- Обрабатывать все параметры типа черты как типы ввода и
- Предоставление связанных типов, которые являются типами вывода.
RFC использует структуру графа в качестве мотивирующего примера, и это также используется в документации, но я признаю, что не полностью оценил преимущества версии связанного типа над версией с параметризацией типа. Прежде всего, метод distance
не должен заботиться о типе Edge
. Это хорошо, но кажется, что причины наличия связанных типов вообще немного поверхностны.
Я обнаружил, что связанные типы довольно интуитивно понятны для использования на практике, но я испытываю трудности при принятии решения, где и когда мне следует использовать их в своем собственном API.
Когда я пишу код, когда я должен выбрать связанный тип вместо параметра общего типа, и когда я должен сделать обратное?