代码:
use std::collections::HashMap;
fn do_something<'a>(map: &'a mut HashMap<u32, Box<u32>>, key: &u32) -> &'a mut u32 {
if let Some(b) = map.get_mut(key) { return b.as_mut(); }
let mut b = Box::new(123);
map.insert(*key, b);
b.as_mut()
}
字符串
我有两个主要的编译器错误(第三个不是这样):
- 借用
map
的错误 - 未实现
Copy
trait的错误
我从我的算法中提取了这段代码,意思是一样的。用GC在其他语言中的某种“翻译”代码可以完美地编译和运行,但在这里我得到了错误。我理解为什么会发生这些错误,但我需要我的代码以这种方式工作:在迭代期间,我将节点存储在Map中,并在下一次迭代中使用它作为当前值。我真的很想知道如何使这段代码在没有其他东西的情况下工作,比如Rc
。
1条答案
按热度按时间fzsnzjdm1#
这是当前借位检查器中的一个已知限制。Polonius应该接受这个代码,无论它何时登陆(现在估计是2024年的某个时候)。
然而,基于条目的API无论如何都是正确的方法。它更简洁地表达了相同的操作,并且被当前的借用检查器所接受:
字符串
(Playground)