我正在尝试运行这个
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/