以下是结构体定义:
尝试将一个结构体的向量分配给另一个向量会导致错误:
错误是
这个结构体被借用为可变的,为什么不能从
struct:
struct Data {
xs: Vec<i32>,
ys: Vec<i32>
}
尝试将一个结构体的向量分配给另一个向量会导致错误:
impl Data {
fn proc(&mut self) {
self.xs = self.ys;
}
}
错误是
move occurs because self.ys has type Vec<i32>, which does not implement the Copy trait
。这个结构体被借用为可变的,为什么不能从
self.ys
中移动呢?
Copy
。例如,在函数中将一个可变向量移动到另一个可变向量中是可能的,一旦这些向量被定义为局部变量。为什么在结构体中这样做就不起作用呢? - JoeDoe&mut self
移动。 - Netwave&mut
,那么就不可能从任何字段中移动值,对吗?如果是这样的话,是否是为了防止在字段中留下未初始化的值而进行的。我很好奇,通过将Vec :: new()分配给它,可以丢弃ys
中的值,但无法使丢弃的值有用(即将其用作r-value)。 - JoeDoestd::mem::take
来获取旧值的所有权,并用默认值或其他值替换它。但最终,这与执行mem::swap相同。 - Netwave