作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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);
}
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/
Closed. This question is opinion-based。它当前不接受答案。
我知道如何创建和编写我自己的安装程序,但我需要在某些时候被重定向。这一点我肯定也会启发其他人。 我创建了一个安装项目。一切都完成了。 EXE 中的安装文件除外。 我知道有两种不同的方法: 在 EXE
重复 What is a PHP Framework?and many more 到目前为止,我一直在使用 PHP 进行小的调整,主要是使用 WordPress。什么是 PHP 框架?为什么我需要它们
我刚刚发现 String#split 有以下奇怪的行为: "a\tb c\nd".split => ["a", "b", "c", "d"] "a\tb c\nd".split(' ') => ["a
我是一名优秀的程序员,十分优秀!