第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從HashMap或Vec返回引用會(huì)導(dǎo)致借用超出其范圍?

從HashMap或Vec返回引用會(huì)導(dǎo)致借用超出其范圍?

從HashMap或Vec返回引用會(huì)導(dǎo)致借用超出其范圍?我遇到了一個(gè)持續(xù)的編譯錯(cuò)誤,Rust抱怨我在嘗試不斷地借款時(shí)有一個(gè)不可變的借入,但是不變的借入來自另一個(gè)范圍,而且我不會(huì)從它帶來任何東西。我有一些代碼來檢查映射中的值,如果它是存在的,就返回它,否則它需要以各種方式修改映射。問題是,我似乎找不到一種方法讓RUST讓我做這兩種操作,即使這兩個(gè)操作是完全分開的。下面是一些與我的代碼結(jié)構(gòu)相同的荒謬代碼,并展示了問題所在:use std::collections::BTreeMap;fn do_stuff(map: &mut BTreeMap<i32, i32>, key: i32) -> Option<&i32> {     // extra scope in vain attempt to contain the borrow     {         // borrow immutably         if let Some(key) = map.get(&key) {             return Some(key);         }     }     // now I'm DONE with the immutable borrow, but rustc still thinks it's borrowed     map.insert(0, 0); // borrow mutably, which errors     None}此錯(cuò)誤包括:error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable   --> src/lib.rs:14:5    | 3  | fn do_stuff(map: &mut BTreeMap<i32, i32>, key: i32) -> Option<&i32> {    |                  - let's call the lifetime of this reference `'1` ... 7  |         if let Some(key) = map.get(&key) {    |                            --- immutable borrow occurs here 8  |             return Some(key);    |                    --------- returning this value requires that `*map` is borrowed for `'1` ... 14 |     map.insert(0, 0); // borrow mutably, which errors    |     ^^^^^^^^^^^^^^^^ mutable borrow occurs here這對我來說毫無意義。不可變的借入怎么會(huì)比那個(gè)范圍更長?!其中一個(gè)分支match通過return而另一個(gè)則什么也不做就離開了范圍。我以前見過這種情況,我在其他變量中錯(cuò)誤地將借款從范圍外走私出去,但這里不是這樣的!是的,借用是通過return語句,但這是荒謬的,阻止借入更低的功能-程序不可能返回并繼續(xù)前進(jìn)!如果我在那里返回其他東西,錯(cuò)誤就會(huì)消失,所以我認(rèn)為這就是借閱檢查程序被掛起來的原因。我覺得這就像個(gè)蟲子。不幸的是,我一直無法找到任何方法來重寫它而不會(huì)碰到同樣的錯(cuò)誤,所以如果是這樣的話,這是一個(gè)特別令人討厭的錯(cuò)誤。
查看完整描述

2 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

不幸的是,.entry()不適合此函數(shù)所需的操作。我意識(shí)到了非詞匯范圍的問題,通常我可以解決這個(gè)問題,但在這種情況下,我還沒能想出一些不做重復(fù)工作的東西,不管解決辦法有多么丑陋…。另外,通常添加一個(gè)作用域可以解決這個(gè)問題,但在這里它并不有效;即使將一個(gè)借入到另一個(gè)函數(shù)也沒有幫助。

查看完整回答
反對 回復(fù) 2019-07-09
  • 2 回答
  • 0 關(guān)注
  • 445 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)