gpt4 book ai didi

rust - 为什么 Rust 编译器没有检测到未使用的借用引用?

转载 作者:行者123 更新时间:2023-12-03 11:29:35 25 4
gpt4 key购买 nike

为什么以下编译失败(2018版)

fn main() {
let mut s = String::from("hello");
let r1 = &mut s;
{
let _r2 = &s;
}
println!("{}", r1);
}
为什么编译器没有注意到 _r2 未被使用并成功编译上述内容?
它提示我们有可变和不可变的引用,并且在 println 中使用了可变的。

最佳答案

the confusing part is that literature (books etc...) talk about "using block to restrict borrowing scope. "Beginning Rust" p348 for example. So I found it confusing that we advocate for such practices but it (sometimes) does not work.


但它在这里工作; _r2的范围受它的块限制
声明在。问题只是 r1在此范围内也可见。
也就是说,错误消息不是说“你不能 println 因为在那个时候有可变和不可变借用”,而是“你不能声明 _r2 因为在那个时候已经有一个可变借用了”。 println仅作为原因出现 r1_r2 点还活着的声明。
您可以从错误消息中看到:
error[E0502]: cannot borrow `s` as immutable because it is also borrowed as mutable
--> src/main.rs:5:19
|
3 | let r1 = &mut s;
| ------ mutable borrow occurs here
4 | {
5 | let _r2 = &s;
| ^^ immutable borrow occurs here
6 | }
7 | println!("{}", r1);
| -- mutable borrow later used here
^^指向实际错误位置; --是其他相关地点。

关于rust - 为什么 Rust 编译器没有检测到未使用的借用引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65470898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com