作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了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());
}
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`
最佳答案
从 Extend::extend
接受一个迭代器:
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
let mut v: Vec<U> = /**/;
let other: Vec<T> = /**/;
v.extend(other.into_iter().map(<U as From<T>>::from));
From
实现并让编译器“为你做丑事”,正如评论中提到的@Stargateur:
v.extend(other.into_iter().map(From::from));
关于rust - 当 U 的 From<T> 可用时,将 Vec<T> 转换为 Vec<U>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59978109/
我是一名优秀的程序员,十分优秀!