我如何返回对RefCell >>的内部数据的引用? [重复]

问题描述 投票:0回答:1
我正在创建一个延迟加载的结构:

pub struct LazyData<T, U:FnOnce() -> T> { data: RefCell<Option<T>>, generator: RefCell<Option<U>>, } impl<T,U:FnOnce() -> T> LazyData<T,U> { pub fn new(generator:U) -> LazyData<T,U> { LazyData { data: RefCell::new(None), generator: RefCell::new(Some(generator)), } } ... }

我试图实现一个get方法,该方法将返回延迟加载的数据:

pub fn init(&self) { if self.data.borrow().is_none() { let generator = self.generator.replace(None).unwrap(); let _none = self.data.replace(Some(generator())); }; } pub fn get(&self) -> &T { self.init(); self.data.borrow().as_ref().unwrap() }

但是编译器抱怨我返回的值引用了当前函数拥有的数据。这个错误对我来说很有意义,但我不确定如何解决。

Here's a link to a full example.

rust lazy-loading borrow-checker refcell
1个回答
0
投票
pub fn get(&self) -> Ref<T> { self.init(); Ref::map(self.data.borrow(), |borrow| { borrow.as_ref().unwrap() }) }
© www.soinside.com 2019 - 2024. All rights reserved.