例如,我有以下结构:
struct MyStruct {
items: RefCell<HashMap<i32, SomeStruct>>,
}
impl MyStruct {
fn new() -> Self {
Self {
items: RefCell::new(HashMap::new()),
}
}
fn get_item(&self, key: &i32) -> Option<&SomeStruct> {
let items = self.items.borrow();
items.get(key)
}
}
由于生命周期不同,该代码将无法编译。所以,我尝试介绍这些生命周期:
fn get_item<'a>(&'a self, key: &i32) -> Option<&'a SomeStruct> {
let items = self.items.borrow();
items.get(key)
}
但是它什么也没解决。
在这种情况下是否可以返回
Option<&'a SomeStruct>
或类似类型?
正如评论中提到的,您无法返回引用,因为它会比函数中创建的
Ref
寿命更长,并且允许多次借用。要返回可选的 Ref
,您可以使用 Ref::filter_map()
,如下所示:
fn get_item(&self, key: &i32) -> Option<Ref<'_, SomeStruct>> {
let items = self.items.borrow();
Ref::filter_map(items, |items| items.get(key)).ok()
}