Возможно, я пропустил весь вопрос о протоколах, но мой вопрос: могут ли протоколы использоваться, чтобы определять, как итерации пользовательской структуры данных или как println будет печатать объект?
Предполагая отображение с двумя векторами,
{:a [] :b []}
Когда вы вызываете его первым, я хотел бы взять из: a vector, но когда conj на этой структуре я хотел бы соединить с: b. Могу ли я использовать протоколы для достижения такого типа поведения?