rust - 消除结构中关联类型的歧义

标签 rust

我正在尝试运行它

use std::collections::BTreeSet;

pub struct IntoIter<T> {
    iter: BTreeSet<T>::IntoIter,
}

fn main() {}

Playground

这失败了

error[E0223]: ambiguous associated type
 --> src/main.rs:4:11
  |
4 |     iter: BTreeSet<T>::IntoIter,
  |           ^^^^^^^^^^^^^^^^^^^^^ ambiguous associated type
  |

为什么关联类型不明确?

最佳答案

“模棱两可”在这里似乎有点误导性的措辞。此示例产生相同的错误消息:

struct Foo;

pub struct Bar {
    iter: Foo::Baz,
}

fn main() {}

我不确定,但我发现标准库中不太可能有一个名为 Baz 的关联类型,更不可能有两个使它变得模棱两可!

更有可能的是这种语法不够具体。 可能多个特征可能具有 Baz 关联类型,这是完全合理的。因此,您必须指定要使用哪个特征的关联类型:

struct Foo;

pub struct Bar {
    iter: <Vec<u8> as IntoIterator>::IntoIter,
}

fn main() {}

关于rust - 消除结构中关联类型的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261912/

相关文章:

rust - 如何从 Visual Studio Code 启动 Rust 应用程序?

rust - 是否可以为特定目标指定 `panic = "abort"`?

rust - 将二进制数据解析为原始类型的惯用方法

linux - Rust:如何生成在父级收到SIGINT/SIGTERM之后仍继续存在的子进程

assembly - 我无法在链接描述文件中指定 Rust 程序的起始偏移量是有原因的吗?

reference - 尝试转移所有权时无法移出借用的内容

rust - 简单的枚举应该派生 Copy 吗?性能有什么区别吗?

javascript - 为什么 Rust WASM 在计算素数时比 JavaScript 慢

rust - 参数数量/类型不匹配

multithreading - Rust多线程HTTP请求,是否从响应中获取所有数据?