gpt4 book ai didi

rust - 移入和移出可变借用结构

转载 作者:行者123 更新时间:2023-11-29 07:47:47 26 4
gpt4 key购买 nike

有人可以解释为什么将值移入借用的结构是有效的,而将它们移出则不是吗?例如:

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);
}

在任何一种情况下,可变借用结构的成员都会被修改。然而,其中一个会导致编译错误。

最佳答案

主要区别在于,当您从借用的结构中移动一个值时,您将其置于“部分移动状态”,这将禁止它之后作为一个整体结构使用。

这种状态对于借用的值是禁止的,因为它们需要在函数结束时仍然有效并且编译器不(还?)理解你在之后正确设置值。

但是,如果您想要做的是提取旧的 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
}

关于rust - 移入和移出可变借用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com