【发布时间】:2021-05-26 18:12:28
【问题描述】:
如果我有一个Vec<T>,我无法直接使用.into() 将其转换为Vec<U>,即使我可以使用.into() 将T 转换为U。例如这段代码不编译:
use std::convert::From;
struct A {
x: i32,
}
struct B {
y: u64,
}
impl From<A> for B {
fn from(a: A) -> Self {
Self {
y: a.x as u64,
}
}
}
fn main() {
let avec: Vec<A> = vec![A{x: 1}, A{x: 2}];
let bvec: Vec<B> = avec.into(); // Error!
}
我觉得应该可以有一个像这样的毯子实现:
impl<T, U> From<Vec<T>> for Vec<U> where T: From<U> {
fn from(t: Vec<T>) -> Self {
t.into_iter().map(Into::into).collect()
}
}
对于其他系列也是如此。没有这样做是有原因的吗?当您想要转换时,它将节省大量繁琐的代码,例如将 HashMap<String, Vec<Vec<u32>>> 转换为 HashMap<String, Vec<Vec<u64>>>。
【问题讨论】:
标签: collections rust hashmap vec