我正在努力與借位檢查器-不知道。當我通過添加一個塊找到解決方案時,我很好奇是否還有其他方法來結束可變借用,以便下一條語句以后可以訪問綁定。這是我到目前為止所做的: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 關注
- 499 瀏覽
添加回答
舉報
0/150
提交
取消