相关疑难解决方法(0)

什么是非词汇生命?

Rust有一个与非词汇生命周期相关的RFC,已被批准在该语言中实现了很长时间.最近,Rust对此功能的支持有了很大改进,并且被认为是完整的.

我的问题是:非词汇生命究竟是什么?

lifetime rust lifetime-scoping

63
推荐指数
1
解决办法
6149
查看次数

来自HashMap的默认可变值

假设我有一个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)

lifetime rust

9
推荐指数
2
解决办法
1042
查看次数

模式匹配选项时引用类型不兼容的匹配臂引发错误

我对 Rust 相当陌生,无法解决这个令人困惑的错误。

我只是想匹配aOptionget函数返回的 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)

我真的不知道该编译器抱怨什么类型的约在这里,因为这两个SomeNone是同一枚举类型的两个组成部分。谁能解释编译器对我的代码有什么问题?

hashmap pattern-matching optional rust

5
推荐指数
1
解决办法
1172
查看次数