如何解决如果元素可以转换,为什么不能使用 .into() 转换容器?
如果我有 Vec<T>
,即使我可以使用 {{ 将 Vec<U>
转换为 .into()
,我也无法直接使用 T
将其转换为 U
1}}。例如,此代码无法编译:
.into()
我觉得应该可以有一个像这样的整体实现:
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>>>
。
解决方法
具有用于转换容器的全面实现的问题(当前)是它与现有的全面实现 impl From<T> for T
相冲突。
为了解决这个问题,简而言之需要 specialization (Issue #31844)。
select * from t1 join t2 on t1.colA in split(t2.colB,',')
不久前在 Rust 论坛上讨论了同样的问题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。