我可以将传播/结构更新语法与 to_owned() 结合使用吗?
Can I combine the spread / struct update syntax with to_owned()?
我喜欢你可以替换像
这样的东西
Doc {
id: 1,
a: new_doc.a,
b: new_doc.b,
c: new_doc.c,
d: new_doc.d,
e: new_doc.e,
};
和
Doc {
id: 1,
..new_doc
};
但是你能用这个做同样的事情吗:
Doc {
id: 1,
a: new_doc.a.to_owned(),
b: new_doc.b.to_owned(),
c: new_doc.c.to_owned(),
d: new_doc.d.to_owned(),
e: new_doc.e.to_owned(),
};
如果不是,最短的写法是什么?
在这种情况下,如果您不想失去原始结构的所有权,解决方案是克隆它(或者如果您愿意,可以实施 ToOwned
,尽管 clone
更正确海事组织):
#[derive(Clone, Debug)]
struct Doc {
id: usize,
a: String,
}
fn main() {
let d = Doc {id: 1, a: "foo".to_string()};
let d2 = Doc {
id: 2,
..d.clone()
};
println!("{d:?} {d2:?}");
}
我喜欢你可以替换像
这样的东西Doc {
id: 1,
a: new_doc.a,
b: new_doc.b,
c: new_doc.c,
d: new_doc.d,
e: new_doc.e,
};
和
Doc {
id: 1,
..new_doc
};
但是你能用这个做同样的事情吗:
Doc {
id: 1,
a: new_doc.a.to_owned(),
b: new_doc.b.to_owned(),
c: new_doc.c.to_owned(),
d: new_doc.d.to_owned(),
e: new_doc.e.to_owned(),
};
如果不是,最短的写法是什么?
在这种情况下,如果您不想失去原始结构的所有权,解决方案是克隆它(或者如果您愿意,可以实施 ToOwned
,尽管 clone
更正确海事组织):
#[derive(Clone, Debug)]
struct Doc {
id: usize,
a: String,
}
fn main() {
let d = Doc {id: 1, a: "foo".to_string()};
let d2 = Doc {
id: 2,
..d.clone()
};
println!("{d:?} {d2:?}");
}