rust - 为什么在这种情况下不允许关联类型?

标签 rust

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;
}

Playground link

如果您像上面那样操作,它将限制特征的实现者指定 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::IterIterator超过String .

关于rust - 为什么在这种情况下不允许关联类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69593557/

相关文章:

debugging - 如何使用 GDB 或 LLDB 等调试器在 Rust 中调试 crate?

heroku - 将 Rust 应用程序部署到 Heroku 时如何修复 "cannot find -lsqlite3"错误?

rust - 如何在不递归的情况下删除此 mandelbrot 函数中的可变变量?

rust - 我什么时候应该对新 cargo 使用 --bin 选项?

rust - 为什么 `Item` 迭代器的 `Char` 是通过在字符串切片上调用 `chars` 而获得的,而不是对 `char` 的引用?

rust - 特征可以作为 Fn 引用或闭包传递吗

rust - 为什么在全局范围内声明的枚举明确不需要终止分号?

linux - Rust 无法在 Linux 中编译为可执行文件

rust - 如何指定一个接受引用并返回实现与引用具有相同生命周期的特征的任何类型的闭包?

generics - 如何制作通用的绝对值函数?