gpt4 book ai didi

rust - 临时别名可变引用的最佳方法是什么?

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

我试图根据某些条件修改两个数组之一(在可变借项后面)。最好的方法是为可变借项创建一个临时别名,如以下(未编译)代码所示:

fn main() {
let mut x = [1;5];
let mut y = [1;5];

modify_arrays(&mut x, &mut y);
}

fn modify_arrays<'a>(arr1: &'a mut [u8], arr2: &'a mut [u8]) {
if arr1.len() == arr2.len() {
for i in 0 .. arr1.len() {
let array_to_change = if i % 2 == 0 {
arr1
} else {
arr2
};

array_to_change[0] += 1; // example computation on array_to_change
}
}
}
&mutarr1中的 arr2值已移至 array_to_change,因为 &mut值未实现 Copy特性。所以我想,使用引用 &arr1&arr2。但是,即使它们是可变引用的引用,我也无法索引 arr1arr2。因此,导致出现以下我不喜欢的代码,原因有两个。
  • array_to_change&mut &mut,即使仅表示一个间接级别(对数组的引用)也是如此。
  • arr1arr2被声明为可变的,即使我无意对其进行突变。
  • fn modify_arrays<'a>(mut arr1: &'a mut [u8], mut arr2: &'a mut [u8]) {
    if arr1.len() == arr2.len() {
    for i in 0 .. arr1.len() {
    let array_to_change = if i % 2 == 0 {
    &mut arr1
    } else {
    &mut arr2
    };

    array_to_change[0] += 1; // example computation on array_to_change
    }
    }
    }
    有更好的解决方案吗?

    最佳答案

    当然,&mut *arr将重新借入:

    fn modify_arrays<'a>(arr1: &'a mut [u8], arr2: &'a mut [u8]) {
    if arr1.len() == arr2.len() {
    for i in 0 .. arr1.len() {
    let array_to_change = if i % 2 == 0 {
    &mut *arr1
    } else {
    &mut *arr2
    };

    array_to_change[0] += 1;// example computation on array_to_change...
    }
    }
    }
    Playground上看到它。

    关于rust - 临时别名可变引用的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63349594/

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