我正在与借用检查器抗争 - 真是奇迹中的奇迹。
虽然我通过添加一个代码块找到了解决方案,但我很好奇是否有其他方法可以结束可变借用,以便下一条语句可以在之后访问绑定。
目前为止,我已经做了这些:
let mut canvas: Canvas = Canvas {
width: 5,
height: 5,
array: vec!['x'; 5*5],
};
{
let mut renderer: CanvasRenderer = CanvasRenderer::new(&mut canvas);
renderer.render_point('x', 3, 3);
}
println!("The Value in the array is: {}", canvas.array[9]);
我在绑定一个CanvasRenderer
对象后,将其包装在一个块中,在改变画布和作用域结束后,CanvasRenderer
会被销毁,我的可变借用canvas
现在可以被读取或其他操作。
这种方法是可行的-但现在我想看到其他解决方案!
我听说过drop(stuff)
,但它并没有像我想象的那样起作用。
unsafe
)来改变它所指向的数据。更具体地说,如果你有一个对某个变量的不可变引用,你既不能取得同一变量或其内部的可变引用,也不能直接修改该变量,即使它存储在一个mut
插槽中。这是Rust所有权/借用概念的基石之一,也是使不可变引用别名安全的原因之一。另外请注意,可变引用是不可复制的。 - Vladimir Matveevimpl Copy for &T
)-- 这就是为什么您可以共享不可变引用。另一方面,“&mut T” 引用是不可复制的。 - Daniel