Rust 如何对关联类型(例如迭代器::项)的关联类型施加类型约束?
我正在尝试定义一个与类型相关的特征。我还希望关联类型实现Rust 如何对关联类型(例如迭代器::项)的关联类型施加类型约束?,rust,traits,type-constraints,associated-types,Rust,Traits,Type Constraints,Associated Types,我正在尝试定义一个与类型相关的特征。我还希望关联类型实现迭代器及其项关联类型实现AsRef 虽然我知道如何为函数或具体的迭代器::Item类型执行此操作,但我无法为原始情况提供清晰简洁的解决方案 感谢这些有用的错误消息,我的编译解决方案是: trait Note where <<Self as Note>::FieldsIter as Iterator>::Item: AsRef<str>, { type FieldsIter: Iterato
迭代器
及其项
关联类型实现AsRef
虽然我知道如何为函数或具体的迭代器::Item
类型执行此操作,但我无法为原始情况提供清晰简洁的解决方案
感谢这些有用的错误消息,我的编译解决方案是:
trait Note
where
<<Self as Note>::FieldsIter as Iterator>::Item: AsRef<str>,
{
type FieldsIter: Iterator;
//other fields and methods omitted
}
此操作失败,因为此处不允许使用impl
:
trait Note {
type FieldsIter: Iterator<Item = impl AsRef<str>>;
//other fields and methods omitted
}
您可以做一个小小的改进,但除此之外,当前的语法如下所示:
trait Note
where
<Self::FieldsIter as Iterator>::Item: AsRef<str>,
{
type FieldsIter: Iterator;
}
现在解决这个问题的一种方法类似于。这将引入另一个关联类型:
trait Note {
type FieldsIter: Iterator<Item = Self::Item>;
type Item: AsRef<str>;
}
trait注释{
类型FieldsIter:Iterator;
类型项:AsRef;
}
我不喜欢这个,因为它引入的类型起初看起来是相互正交的,但最终是紧密相关的
trait Note
where
<Self::FieldsIter as Iterator>::Item: AsRef<str>,
{
type FieldsIter: Iterator;
}
trait Note {
type FieldsIter: Iterator<Item: AsRef<str>>;
}
trait Note {
type FieldsIter: Iterator<Item = Self::Item>;
type Item: AsRef<str>;
}