gpt4 book ai didi

rust - 为什么 Rust 借用检查器拒绝这个函数?

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

这个(非常愚蠢的)函数编译失败:

fn silliness(mut z: &mut int) {
z = &mut *z;
}

编译器输出:

$ rustc blah.rs 
blah.rs:2:5: 2:16 error: cannot assign to `z` because it is borrowed
blah.rs:2 z = &mut *z;
^~~~~~~~~~~
blah.rs:2:14: 2:16 note: borrow of `z` occurs here
blah.rs:2 z = &mut *z;
^~
error: aborting due to previous error

在我看来,由于在任何时候都只有一个指向 z 指向的内容,所以应该没问题。我不明白什么?

最佳答案

它是安全的,但编译器还不够聪明,无法理解它。以下扰动编译良好:

fn silliness(mut z: &mut int) {
let tmp = z;
z = &mut *tmp;
}

fn main() {}

playpen

这个引入临时技巧是一个有用的工具,特别是在编写循环遍历您有 &mut 引用的数据结构时,例如TreeMap将它 (let temp) 用于 find_mut,它使用循环来提高效率(而不是通过递归进行明显的实现,递归不需要这个技巧)。

关于rust - 为什么 Rust 借用检查器拒绝这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685251/

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