Mat*_*ner 4 type-conversion traits rust
我已经实施From<T> for U
,并希望我可以Vec<U>::extend
使用Vec<T>
. 相反,我得到expected T, got U
. 解决这个问题的最惯用的方法是什么?
struct U;
struct T;
impl From<T> for U {
fn from(_other: T) -> Self {
U
}
}
fn main() {
let mut v: Vec<U> = Vec::new();
let other: Vec<T> = Vec::new();
v.extend(other.into_iter());
}
Run Code Online (Sandbox Code Playgroud)
error[E0271]: type mismatch resolving `<std::vec::IntoIter<T> as std::iter::IntoIterator>::Item == U`
--> src/main.rs:14:7
|
14 | v.extend(other.into_iter());
| ^^^^^^ expected struct `T`, found struct `U`
|
= note: expected type `T`
found type `U`
Run Code Online (Sandbox Code Playgroud)
因为Extend::extend
需要一个迭代器:
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
Run Code Online (Sandbox Code Playgroud)
您实际上可以使用地图适配器:
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
Run Code Online (Sandbox Code Playgroud)
游乐场。或者你可以省略特定的From
实现,让编译器“为你做丑陋的事情”,正如评论中提到的@Stargateur:
v.extend(other.into_iter().map(From::from));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133 次 |
最近记录: |