xet*_*a11 4 rust borrow-checker
我正在努力与借阅检查员 - 不知道为什么.
虽然我通过添加一个闭包找到了一个解决方案,但我很好奇是否有其他方法可以结束可变借用,因此下一个语句可以在之后访问绑定.
这是我到目前为止所做的:
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]);
Run Code Online (Sandbox Code Playgroud)
我在一个CanvasRenderer对象的绑定周围包裹了一个闭包,在改变了画布并且范围结束之后,可以读取CanvasRenderer模具和我的可变借用canvas或其他任何东西.
这有效 - 但现在我想看到其他解决方案!
我听说过,drop(stuff)但它没有按照我的想法行事.
Vla*_*eev 13
没有其他办法; 使用块是在做它的方式.在Rust 2018之前(在Rust 1.31中可用),所有借词都是词汇,也就是说,它们总是对应于某些词汇范围.唯一一个大于单个语句的作用域是块的作用域,因此块是限制借用作用域的唯一工具.
drop()不会有两个原因:首先,因为它需要在Rust 2018之前不支持的非词法范围,其次,它不能成为管理借用的通用工具:例如,它将无法结束不可变的借用只是因为不可变的引用是Copy并且不能被"删除".
也可以看看: