我正在尝试运行这个

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/

10-10 18:34