gpt4 book ai didi

rust - 当你在 Rust 中可变地隐藏一个 Vector 时会发生什么?

转载 作者:行者123 更新时间:2023-12-04 02:26:46 25 4
gpt4 key购买 nike

我目前正在学习 ruSTLings 类(class),当这个关于 move 语义的练习出现时,我感到很困惑。这是它的要点:

fn main(){
let vec0 = Vec::new();
let mut vec1 = fill_vec(vec0);
//stuff happens
}

fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
//do stuff
vec
}

据我所知,不可变的 vec0 正在作为参数 vec move 到 fill_vec,然后可变 let mut vec = vec; 覆盖。由于 Vectors 是对堆存储的引用,这是否意味着 clone() 由于阴影而发生,或者是否重复使用了相同的指针并使其可变?为什么要在这种情况下使用阴影?

最佳答案

is the same pointer reused and just made mutable?

是的。完全相同的对象,在运行时它本质上是一个空操作。

Why would shadowing be used in this case at all?

有些人喜欢通过阴影暂时“锁定”和“解锁”绑定(bind)的模式,例如

let a = …;

let mut a = a;
// mutate `a` in-place
let a = a; // lock to readonly again

这真的只是个人喜好。这里:

  • 本可以引入一个新变量,但它真的更有用吗?它会叫什么? vec_mut?不像源可以重复使用,它被移走了。
  • 或者,输入参数可以直接是 mut vec: ...

这主要取决于个人选择。

关于rust - 当你在 Rust 中可变地隐藏一个 Vector 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67036004/

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