我的结构中有一个RefCell
要访问和修改的结构。但是,我可以访问它的唯一方法RefCell
是使用闭包。因此,我想从闭包中返回一个可变引用( RefMut
),我可以在封闭范围内使用和修改它。
{
let mut state_ref: RefMut<_> = self.dialog.call_on_name("dirview", |view: &mut Canvas<RefCell<FileDialogState>>| {
let state: &RefCell<FileDialogState> = view.state_mut();
state.borrow_mut()
}).unwrap();
state_ref.foo = bar;
// Mutable reference to RefCell should cease to exist here
}
但是,编译器抱怨说RefMut
我返回的生命周期超过了我创建它的闭包的生命周期。
尽管如此,我还是看到了与我想要实现的功能类似的代码——例如这里:
impl Backend {
pub fn init() -> ... {
let stdout = RefCell::new(BufWriter::new(io::stdout()));
...
}
fn stdout_mut(&self) -> RefMut<BufWriter<Stdout>> {
self.stdout.borrow_mut()
}
这两个用例有什么区别?为了能够返回RefMut
参考,我缺少什么?