rust - 在具有相同生命周期的嵌套引用的情况下,借用检查器的逻辑到底是什么?
问题描述
fn f<'a>(_: &'a mut &'a u8) {}
fn main() {
let mut data = &1;
{
let tmp_mut = &mut data;
f(tmp_mut);
}
println!("{:p}", data);
}
error[E0502]: cannot borrow `data` as immutable because it is also borrowed as mutable
--> src/main.rs:11:22
|
8 | let tmp_mut = &mut data;
| ---- mutable borrow occurs here
...
11 | println!("{:p}", data);
| ^^^^ immutable borrow occurs here
12 | }
| - mutable borrow ends here
可以通过不在函数签名中使用相同的生命周期(只需 leave fn f(_: &mut &u8) {}
)来修复此代码,但这里到底发生了什么?
错误消息看起来有点奇怪 -tmp_mut
试图比声明它的块更有效似乎违反直觉。我希望错误消息抱怨不可能的生命周期要求,而不是唯一性错误。
解决方案
推荐阅读
- qbasic - 如何知道输入的字母是元音还是辅音
- python-3.x - 如何从 Pandas 系列行中提取元素
- r - 你如何过滤ggplot中的空单元格?
- filesystems - 我可以在不备份分区的情况下移动分区吗?
- visual-studio-code - 如何让某些 pygame 模块在 VSC 中工作?,其他修复不起作用
- javascript - 节点模块缓存如何与工厂功能一起使用?
- python - 有没有办法使用 python 来“继续”使用 Chrome 中已经存在的开放 websocket?
- reactjs - 如何让 Firestore 文档字符串显示?无法执行状态更新,useEffect 中的异步功能
- jupyter-lab - 保护 jupyter-lab ssl.SSLError: [SSL] PEM lib (_ssl.c:4022)
- typescript - 如何跳过 typescript linter “null-checking”,因为它已经在“assert”函数中完成