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
,现在正是它们标准化的时候了!:)