亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 499 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號