我正在努力与借位检查器-不知道。当我通过添加一个块找到解决方案时,我很好奇是否还有其他方法来结束可变借用,以便下一条语句以后可以访问绑定。这是我到目前为止所做的: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)但是没有按我认为的那样工作。
3 回答

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

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

MMMHUHU
TA贡献1834条经验 获得超8个赞
我想我现在明白了。绝对不会复制mut ref,因为如果这样的话,两个工作人员可能会改变其状态。immu ref会将引用复制到基础数据,以便许多工作人员可以读取它们,但是由于不可更改性,因此永远不要更改它们。
- 3 回答
- 0 关注
- 470 浏览
添加回答
举报
0/150
提交
取消