在 Rust 中结束可变借用的选项有哪些?
What are the options to end a mutable borrow in Rust?
我正在与借阅检查器打交道 - 奇迹啊奇迹。
虽然我通过添加块找到了解决方案,但我很好奇是否还有其他方法可以结束可变借用,以便下一条语句之后可以访问绑定。
这是我目前所做的:
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
对象的绑定周围包装了一个块,并且在改变 canvas 并且范围结束后,CanvasRenderer
死亡并且我的可变借用 canvas
可供阅读或其他任何内容。
这行得通 - 但现在我想看看其他解决方案!
我听说过 drop(stuff)
,但它并没有像我想的那样起作用。
没有别的办法;使用积木是 的方法。在 Rust 2018 之前(在 Rust 1.31 中可用)所有借用都是词法的,也就是说,它们总是对应于某个词法范围。唯一大于单个语句的范围是块的范围,因此块是限制借用范围的唯一工具。
drop()
不起作用有两个原因:首先,因为它需要非词法作用域,这在 Rust 2018 之前不受支持,其次,它不能成为管理借用的通用工具:例如,它不能结束一个 immutable 借用,因为不可变引用是 Copy
而不能是 "dropped".
另请参阅:
- Moved variable still borrowing after calling `drop`?
- What are non-lexical lifetimes?
我正在与借阅检查器打交道 - 奇迹啊奇迹。
虽然我通过添加块找到了解决方案,但我很好奇是否还有其他方法可以结束可变借用,以便下一条语句之后可以访问绑定。
这是我目前所做的:
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
对象的绑定周围包装了一个块,并且在改变 canvas 并且范围结束后,CanvasRenderer
死亡并且我的可变借用 canvas
可供阅读或其他任何内容。
这行得通 - 但现在我想看看其他解决方案!
我听说过 drop(stuff)
,但它并没有像我想的那样起作用。
没有别的办法;使用积木是 的方法。在 Rust 2018 之前(在 Rust 1.31 中可用)所有借用都是词法的,也就是说,它们总是对应于某个词法范围。唯一大于单个语句的范围是块的范围,因此块是限制借用范围的唯一工具。
drop()
不起作用有两个原因:首先,因为它需要非词法作用域,这在 Rust 2018 之前不受支持,其次,它不能成为管理借用的通用工具:例如,它不能结束一个 immutable 借用,因为不可变引用是 Copy
而不能是 "dropped".
另请参阅:
- Moved variable still borrowing after calling `drop`?
- What are non-lexical lifetimes?