假设我有一个HashMap并且我想获得一个条目的可变引用,或者如果该条目不存在我想要一个新对象的可变引用,我该怎么办?我尝试过使用unwrap_or()过这样的东西:
fn foo() {
let mut map: HashMap<&str, Vec<&str>> = HashMap::new();
let mut ref = map.get_mut("whatever").unwrap_or( &mut Vec::<&str>::new() );
// Modify ref.
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它的寿命Vec不够长.有没有办法告诉Rust我希望返回Vec的生命周期与之相同foo()?我的意思是有这个明显的解决方案,但我觉得应该有更好的方法:
fn foo() {
let mut map: HashMap<&str, Vec<&str>> = HashMap::new();
let mut dummy: Vec<&str> = Vec::new();
let mut ref = map.get_mut("whatever").unwrap_or( &dummy );
// Modify ref.
}
Run Code Online (Sandbox Code Playgroud) 我对 Rust 相当陌生,无法解决这个令人困惑的错误。
我只是想匹配aOption的get函数返回的 a HashMap。如果返回一个值,我想增加它,否则我想向地图添加一个新元素。
这是代码:
let mut map = HashMap::new();
map.insert("a", 0);
let a = "a";
match map.get(&a) {
Some(count) => *count += 1,
None => map.insert(a, 0),
}
Run Code Online (Sandbox Code Playgroud)
由此产生的错误:
let mut map = HashMap::new();
map.insert("a", 0);
let a = "a";
match map.get(&a) {
Some(count) => *count += 1,
None => map.insert(a, 0),
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道该编译器抱怨什么类型的约在这里,因为这两个Some和None是同一枚举类型的两个组成部分。谁能解释编译器对我的代码有什么问题?