在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对象的绑定周围包裹了一个块,并在对画布进行了突变并且作用域结束之后,可以读取CanvasRenderer模具和我的可变借canvas位,或者进行读取。


这可行-但现在我想看看其他解决方案!


我听说过,drop(stuff)但是没有按我认为的那样工作。


慕标琳琳
浏览 437回答 3
3回答

芜湖不芜

没有别的办法了。使用块是做到这一点的方法。在Rust 2018(在Rust 1.31中可用)之前,所有借用都是词法的,也就是说,它们始终对应于某些词法范围。大于单个语句的唯一作用域是块的作用域,因此,块是限制借位作用域的唯一工具。drop()不能工作的原因有两个:首先,因为它将要求非词法范围,而在Rust 2018之前是不支持的;其次,它不能是用于管理借贷的通用工具:例如,它将无法仅仅因为不可变引用已被“丢弃”而不能被“丢弃”就结束了不可变借位Copy。

海绵宝宝撒

如果您有一个不变的引用,则无法通过该引用或任何其他方式(unsafe当然,除外)来更改其指向的数据。更具体地说,如果您对某个变量具有不变的引用,则既不能对同一变量或其内部进行可变引用,也不能直接修改此变量,即使该变量存储在mut插槽中也是如此。这是Rust所有权/借用概念的基石之一,这就是使不可变引用的别名安全的原因。另请注意,可变引用不可复制。

MMMHUHU

我想我现在明白了。绝对不会复制mut ref,因为如果这样的话,两个工作人员可能会改变其状态。immu ref会将引用复制到基础数据,以便许多工作人员可以读取它们,但是由于不可更改性,因此永远不要更改它们。
打开App,查看更多内容
随时随地看视频慕课网APP