【发布时间】:2019-08-23 04:47:20
【问题描述】:
我一直在阅读这个issue,它展示了一个简单的示例,说明多个可变借用如何引发此错误"cannot borrow point as mutable more than once at a time":
struct Point {
x: f64,
y: f64
}
impl Point {
pub fn x_mut(&mut self) -> &mut f64 {
&mut self.x
}
pub fn y_mut(&mut self) -> &mut f64 {
&mut self.y
}
}
fn main() {
let mut point = Point { x: 1.0, y: 2.0 };
let x_mut = point.x_mut();
let y_mut = point.y_mut();
*x_mut *= 2.0;
*y_mut *= 2.0;
}
但后来让我感到困惑的部分来了。
生命周期省略规则很清楚为什么会发生这种情况:
x_mut()返回一个可变借用,它必须至少存在self的可变借用
可变借用只要self 就应该存在这一事实如何解释此错误?
【问题讨论】:
-
变量
x_mut必须退出作用域(较旧的 Rust)或停止使用(较新的非词法生命周期 Rust)才能完成对point的可变借用。只要一个可变借位处于活动状态,就无法建立第二个(变量y_mut的点)。方法签名说&mut self,但在main的上下文中,self 指的是point。
标签: rust