Rust循环可变借用冲突咨询:无引用逃逸却触发E0499错误
Rust可变借用冲突问题:结构体共存自有值与引用导致编译错误
和StackOverflow及Rust论坛的相关帖子场景不同,我并没有将引用返回或传递到使用它的代码块之外,但编译器依然抛出可变借用冲突的错误,显然我对Rust的借用规则存在核心误解。
我在使用gif crate时,需要在结构体中同时存储Decoder(自有值)和Frame的引用,却因此触发了引用问题。编译器提示循环中存在多次可变借用,但我认为所有引用都已经被销毁了。
最小复现代码
use simplified_gif_crate::{Decoder, Frame}; // ...[原完整代码]
编译错误信息
error[E0499]: cannot borrow `app.active_gifs` as mutable more than once at a time // ...[原完整错误信息]
尝试的分析与修改
我尝试拆解代码执行流程,想理清逻辑为什么应该可行,但始终没找到问题所在:
let mut app: App = App { // ...[原拆解代码]
另外,我把remove()调用移出else分支,也没能解决问题:
for i in 0..app.active_gifs.len() { // ...[原修改后代码]
补充说明
将decoder(自有值)和current_frame(引用)放在同一个结构体中,是为了避免同时遍历两个独立结构,方便在帧间隔时间到后,用decoder返回的新&Frame来更新current_frame。
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

