Я пытаюсь определить черту связанного типа. Я также хочу, чтобы связанный тип реализовал Iterator
с его Item
связанным типом, реализующим AsRef<str>
.
Хотя я знаю, как это сделать для функции или конкретного Iterator::Item
типа, я не могу придумать четкое и краткое решение для исходного случая.
Благодаря полезным сообщениям об ошибках мое решение для компиляции:
trait Note
where
<<Self as Note>::FieldsIter as Iterator>::Item: AsRef<str>,
{
type FieldsIter: Iterator;
//other fields and methods omitted
}
Уродливая оговорка where
заставляет меня думать, что должен быть лучший способ.
Это не компилируется, поскольку Item: AsRef<str>
- недопустимая конструкция:
trait Note {
type FieldsIter: Iterator<Item: AsRef<str>>;
//other fields and methods omitted
}
Это не удается, поскольку impl
здесь не допускается:
trait Note {
type FieldsIter: Iterator<Item = impl AsRef<str>>;
//other fields and methods omitted
}
Это не компилируется, так как я хочу, чтобы Iterator::Item
реализовал определенную черту, а не был конкретным типом.
trait Note {
type FieldsIter: Iterator<Item = AsRef<str>>;
//other fields and methods omitted
}