Rust编译报错E0506:临时值借用时被丢弃问题原因求解
错误原因
你遇到的E0506是Rust的借用规则冲突报错,核心原因是你修改了一个正被其他引用借用的变量:
- 你代码中的
ts是&str类型,这个引用是通过v2["ts"].as_str()从v2持有的JSON值里获取的,它的生命周期和v2完全绑定,只要ts还处于有效作用域,v2就会被标记为正在被不可变借用,不允许修改。 - 进入下一轮循环时你执行
v2 = longpoll_question(...)赋值新值,这个操作会修改v2本身,但此时v2还被上一轮循环赋值的ts借用,直接违反了借用检查规则。
修复方案
最简单的修复方式是让ts持有独立的字符串所有权,解除和v2的生命周期绑定,不需要修改现有逻辑结构:
- 把开头
ts的定义修改为:
let mut ts = v["response"]["ts"].as_str().unwrap().to_string();
- 把循环内
ts的赋值修改为:
ts = v2["ts"].as_str().unwrap().to_string();
你也可以用if let简化现有判空逻辑,避免重复调用as_str(),写法更简洁安全:
loop { v2 = longpoll_question(server.clone(), ts, key.clone()); let Some(new_ts) = v2["ts"].as_str() else { continue; }; ts = new_ts.to_string(); // 后续循环逻辑 }
内容的提问来源于stack exchange,提问作者danshat
相关产品推荐
相关产品推荐

