如何在填充后将Rust中的HashMap设置为不可变?
如何在Rust中将统计完成的HashMap转为不可变
当然可以实现,你只需要重新绑定一个不带mut的变量来接收填充好的HashMap即可,完全不需要第三方库或者函数/闭包。
具体写法如下:
use std::collections::HashMap; fn main() { let s = "hello world hello rust world"; let mut map = HashMap::new(); for word in s.split_whitespace() { *map.entry(word).or_insert(0) += 1; } // 重新绑定为不可变变量,完成后原可变绑定失效 let map = map; // 此时map已不可变,尝试修改会触发编译错误 // map.insert("test", 1); // 取消注释会报错 }
原理很简单:Rust的变量可变性是绑定层面的属性,而非值本身的属性。当你把原本带mut的绑定赋值给新的不带mut的绑定时,新绑定就失去了修改权限,后续代码里无法再对这个HashMap做修改操作,刚好满足统计完成后锁定状态的需求。
内容的提问来源于stack exchange,提问作者user19055902
相关产品推荐
相关产品推荐

