8

我正在努力使用借阅检查器 - 奇迹o'奇迹。

虽然我通过添加块找到了解决方案,但我很好奇是否还有其他方法可以结束可变借用,以便下一条语句可以在之后访问绑定。

这是我到目前为止所做的:

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)但它没有按我认为的那样工作。

4

1 回答 1

17

没有别的办法;使用块是这样做的方法。在 Rust 2018(在 Rust 1.31 中可用)之前,所有借用都是词法的,也就是说,它们总是对应于某个词法范围。唯一大于单个语句的范围是块的范围,因此块是限制借用范围的唯一工具。

drop()不起作用有两个原因:首先,因为它需要在 Rust 2018 之前不受支持的非词法范围,其次,它不能成为管理借用的通用工具:例如,它不能结束一个不可变的借用仅仅是因为不可变的引用是Copy并且不能被“删除”。

也可以看看:

于 2016-03-03T07:46:34.990 回答