有人可以解释为什么将值移到借来的结构中是有效的,而不是将它们移出去?例如:
struct S {
v: Vec<u8>
}
fn move_v_out(s: &mut S) {
let old_vecotr = s.v; // If removed, program compiles fine
s.v = vec![];
}
fn main() {
let mut v = S {
v: vec![]
};
move_v_out(&mut v);
}
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,都会修改一个可变借入结构的成员.但是,会导致编译错误.
主要的区别在于,当您从借用的结构中移动一个值时,会将其保留为"部分移动状态",这将禁止它在之后用作整个结构.
并且这个状态被禁止使用借来的值,因为它们需要在函数结束时仍然有效,并且编译器不会(但是)理解您之后正确设置了值.
但是,如果您要执行的操作是提取旧的Vec并将其替换为新的Vec,则标准库将包含您所需的功能: std::mem::replace
fn move_v_out(s: &mut S) {
let old_vector = std::mem::replace(&mut s.v, vec![]);
// do something with old_vector
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |