Я пытаюсь определить черту со связанным типом.Я также хочу, чтобы связанный тип реализовал 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
}