Rust:在哈希映射参考中插入uint

空想者

我是Rust的新手,在编译时遇到此错误,但我不明白

error[E0614]: type `Option<u32>` cannot be dereferenced
 --> src/main.rs:9:5
  |
9 |     *mymap.insert("hello world", 0);
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这是我的代码经过简化以重现此问题:

use std::collections::HashMap;

fn main() {
    let mymap: HashMap<&str, u32> = HashMap::new();
    f(&mymap)
}

fn f(mymap: &HashMap<&str, u32>) {
    *mymap.insert("hello world", 0);
}

同样以下内容也不起作用

*mymap.insert("hello world", &0);

我无法通过谷歌搜索找到问题的根本原因,我想我没有这句话。看来有些借贷问题。

瓦伦丁

您实际上并没有取消引用mymap,实际上是在取消引用的结果insert(),因为取消引用(即*)的优先级比方法调用的优先级弱

因此它抱怨取消引用an,Option<u32>因为这就是insert()返回的结果。如果您确实想取消引用mymap,则必须编写(*mymap).insert("hello world", 0);但是,Rust中不需要。

如果删除,*则会遇到第二个问题,即您正在尝试mutate mymap,这是不可变的引用。因此,要插入(例如mutate mymapf,您需要向其传递一个可变的引用(即)mymap: &mut HashMap<&str, u32>

use std::collections::HashMap;

fn main() {
    let mut mymap: HashMap<&str, u32> = HashMap::new();
    f(&mut mymap)
}

fn f(mymap: &mut HashMap<&str, u32>) {
    mymap.insert("hello world", 0);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章