为了账号安全,请及时绑定邮箱和手机立即绑定

在Rust中终止可变借贷有哪些选择?

在Rust中终止可变借贷有哪些选择?

Git
慕标琳琳 2019-11-21 09:36:51
我正在努力与借位检查器-不知道。当我通过添加一个块找到解决方案时,我很好奇是否还有其他方法来结束可变借用,以便下一条语句以后可以访问绑定。这是我到目前为止所做的: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


查看完整回答
反对 回复 2019-11-21
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-11-21
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信