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

Rust 消除结构中关联类型的歧义,rust,Rust,我正在试着运行这个 use std::collections::BTreeSet; pub struct IntoIter<T> { iter: BTreeSet<T>::IntoIter, } fn main() {} 使用std::collections::BTreeSet; pub-struct-IntoIter{ iter:BTreeSet::IntoIter, } fn main(){} 这与 错误[E0223]:关联类型不明确 -->src/

我正在试着运行这个

use std::collections::BTreeSet;

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

fn main() {}
使用std::collections::BTreeSet;
pub-struct-IntoIter{
iter:BTreeSet::IntoIter,
}
fn main(){}

这与

错误[E0223]:关联类型不明确
-->src/main.rs:4:11
|
4 | iter:BTreeSet::IntoIter,
|^^^^^^^^^^^^^^^^^^^^^^^不明确的关联类型
|
为什么关联类型不明确?

这里的“不明确”似乎有点误导性。此示例生成相同的错误消息:

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() {}
structfoo;
酒吧结构酒吧{
国际热核实验堆:::国际热核实验堆,
}
fn main(){}

啊,谢谢,我确实从我的代码库中提取了这一部分。没有意识到这可能会进一步减少。我将更新这个代码段。另一种表达方式是:向对象添加
use
语句破坏代码。如果您为
BTreeSet
实现了一个
trait-trait{type IntoIter;}
,那么导入
trait
会在允许
BTreeSet::IntoIter
的情况下突然中断代码,因为这样做无疑是不明确的。为什么“不太可能”?每个人都在编写自己版本的
Foo
Bar
Baz
,现在正是它们标准化的时候了!:)