Rust多回调中共享可变App状态问题及解决方法
在Rust Cursive库中维护应用状态并实现暂停/恢复的生命周期问题解决
问题描述
在使用Rust的TUI库cursive开发时,需要维护应用状态并实现以下功能:暂停cursive以调用其他命令行程序,之后再恢复cursive运行。但cursive的add_global_callback回调要求静态生命周期,尝试通过Rc、RefCell等智能指针组合传递app引用到多个回调中时均未成功——仅当app被复制/克隆且不修改原始状态时程序才能正常运行。
遇到的错误多为闭包生命周期超出app或app_ptr的借用范围,例如使用Rc::new(RefCell::new(app))时,编译器提示&mut Rc<RefCell<App>>类型找不到stop方法。
解决方法
删除自动导入的use std::ops::BorrowMut即可解决该问题。VS Code的Rust Analyzer扩展在调试过程中会自动导入该模块,这会导致无法正常使用RefCell的borrow_mut()方法,进而无法调用App的相关方法。
内容的提问来源于stack exchange,提问作者chugadie
相关产品推荐
相关产品推荐

