gpt4 book ai didi

rust - Rust 中的隐式借用

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

下面是我尝试运行的代码片段 (playground):

fn main() {
let a = vec!["hello".to_string(), "world".to_string()];
let b = vec![10, 20, 30];

let c = a[0];
let d = b[0];

println!("{:?}", c);
println!("{:?}", d);
}

错误说“值不能从借用的内容中移出”:

error[E0507]: cannot move out of borrowed content
--> src/main.rs:5:13
|
5 | let c = a[0];
| ^^^^
| |
| cannot move out of borrowed content
| help: consider borrowing here: `&a[0]`

但我没有看到任何明确的借用。借款具体在哪里进行?什么是借来的?以及错误中提到的借用内容是什么?

这不会发生在像 floats、chars 等基本类型上。可能是因为值被复制而不是被移动,这只有在基本类型的情况下才有可能(数据结构的值完全存储在堆栈而不是堆中) .

最佳答案

在这种情况下,赋值会移动值。基本上,let stuff = a[0] 尝试移动向量 a 的第 0 索引处的值,这会以某种方式留下该索引undefined,这在 Rust 中是不允许的。表达式 a[0] 借用索引零处的值,因为它是 *a.index(0) 的语法糖,其中 index returns the borrowed value .

这在 Rust 书中和 Rust by example 中有更详细的讨论。

关于rust - Rust 中的隐式借用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54957905/

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