如何在Rust中将HashMap传递给函数

8
有人能解释一下为什么以下代码无法编译吗?
use std::collections::HashMap;

fn add(mut h: &HashMap<&str, &str>) {
    h.insert("foo", "bar");
}

fn main() {
    let mut h: HashMap<&str, &str> = HashMap::new();
    add(&h);
    println!("{:?}", h.get("foo"));
}

这是rustc告诉我的:
hashtest.rs:4:5: 4:6 error: cannot borrow immutable borrowed content `*h` as mutable
hashtest.rs:4     h.insert("foo", "bar");
                  ^
1个回答

29
问题在于您传递了一个可变引用到 HashMap(即引用可以更改以指向另一个 HashMap),而不是一个可变的 HashMap 引用(即 HashMap 可以更改)。以下是正确的代码:

问题在于你将一个可变引用传递给了一个 HashMap(也就是说,该引用可以被更改为指向另一个 HashMap),而不是一个指向可变的 HashMap的引用(也就是说,这个HashMap本身可以被更改)。

这里是正确的代码:

use std::collections::HashMap;

fn add(h: &mut HashMap<&str, &str>) {
    h.insert("foo", "bar");
}

fn main() {
    let mut h: HashMap<&str, &str> = HashMap::new();
    add(&mut h);
    println!("{:?}", h.get("foo"));
}

谢谢!这真的很有帮助。 - hreinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接