trait Envs {
type Item;
type Iter: Iterator;
fn get_envs(&self) -> Self::Iter<Item=Self::Item>;
}
我正在尝试实现返回环境变量的方法,但我无法弄清楚为什么特征中不允许关联类型。
最佳答案
trait Envs {
type Item;
type Iter: Iterator<Item = Self::Item>;
fn get_envs(&self) -> Self::Iter;
}
如果您像上面那样操作,它将限制特征的实现者指定 Iterator
其关联类型与 Envs::Item
相同。所以,Envs::Item
需要与 <Envs::Iter as Iterator>::Item
相同.
如果你喜欢:
trait Envs {
type Item;
type Iter: Iterator;
fn get_envs(&self) -> Self::Iter;
}
这将允许实现者指定 Iter
它不会返回与 Envs::Item
相同的元素。因此,在这种情况下,Envs::Item
可能是这样的。是i32
但是Envs::Iter
是 Iterator
超过String
.
关于rust - 为什么在这种情况下不允许关联类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69593557/