【发布时间】:2015-06-30 14:40:18
【问题描述】:
假设我有一个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.
}
但这不起作用,因为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.
}
【问题讨论】:
-
您想在任何时候不将
dummy插入地图的情况下执行此操作吗?只是想知道。 -
没错,尽管这只是我特定用例中的偏好。虽然我可以想象您不想插入
dummy的情况。