【发布时间】:2021-01-11 23:17:00
【问题描述】:
我的结构中有一个RefCell,我想访问和修改它。但是,我可以访问此RefCell 的唯一方法是使用闭包。因此,我想从闭包中返回一个mutable reference (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 超过了我创建它的闭包的生命周期。
尽管如此,我看到的代码与我想要实现的目标类似——例如here:
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 引用,我缺少什么?
【问题讨论】: