< 返回版块

acodercat 发表于 2019-11-28 11:13

Tags:借用

let mut hm = HashMap::new(); hm.insert(&1,&2); let n = hm.get(&1); hm.insert(&12,&2); println!("{:?}", n);

该代码报错: --> examples/union_find.rs:15:5 | 14 | let n = hm.get(&1); | -- immutable borrow occurs here 15 | hm.insert(&12,&2); | ^^^^^^^^^^^^^^^^^ mutable borrow occurs here 16 | println!("{:?}", n); | - immutable borrow later used here

评论区

写评论
Ticsmtc 2019-11-28 12:29

程序逻辑不变的情况下,可以改成

let mut hm = HashMap::new(); 
hm.insert(1,2); 
let n = hm.get(&1); 
println!("{:?}", n); 
hm.insert(12,2);

解决问题。 原因是 hm.get() 返回的是一个 Option<&T> 包含了一个内部的引用。 而后的hm.insert() 明显是个更改内部数据的操作,所以rust不允许,改变顺序后,rust的借用检查会发现n实际上在之后其实不会被用到,所以允许通过。

1 共 1 条评论, 1 页