gpt4 book ai didi

loops - rust借阅检查看起来很聪明,它可以检查和平整循环的读写。但是我该如何绕过呢?

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

rust借阅检查看起来很聪明,它可以检查和平整循环的读写。但是我该如何绕过呢?

以下代码效果很好:

fn main() {

let mut lines = [
vec![1, 2, 3],
vec![4, 5, 6],
vec![7, 8, 9],
];

for i in 0 .. lines.len() {
let line = &lines[i];
for item in line {
// if found odd number, push zero!
if item % 2 == 1 {
lines[i].push(0);
break; // works fine! if comment it, will error!
}
}
}

dbg!(lines);
}

当注释“break”行时,将得到:
error[E0502]: cannot borrow `lines[_]` as mutable because it is also borrowed as immutable
--> src/main.rs:13:17
|
10 | let line = &lines[i];
| --------- immutable borrow occurs here
11 | for &item in line {
| ---- immutable borrow later used here
12 | if item == 5 {
13 | lines[1].push(55);
| ^^^^^^^^^^^^^^^^^ mutable borrow occurs here

error: aborting due to previous error

最佳答案

您不会绕过借阅检查器。您考虑一下它告诉您的内容,然后重新考虑要匹配的程序。

在这里,它告诉您您不能修改当前要迭代的内容(r ^ w原理),因此请不要这样做。如果要添加的零与每行中有奇数个数一样多,请执行以下操作:计算行中的奇数个数,然后添加多个零:

use std::iter::repeat;

fn main() {

let mut lines = [
vec![1, 2, 3],
vec![4, 5, 6],
vec![7, 8, 9],
];

for line in lines.iter_mut() {
let odds = line.iter().filter(|it| *it % 2 == 0).count();
line.extend(repeat(0).take(odds));
}

dbg!(lines);
}

关于loops - rust借阅检查看起来很聪明,它可以检查和平整循环的读写。但是我该如何绕过呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61654126/

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