在这种情况下,错误是什么意思:
fn main() {
let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
v[v[1]] = 999;
}
error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
--> src/main.rs:3:7
|
3 | v[v[1]] = 999;
| --^----
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
| mutable borrow later used here
我发现索引是通过Index
和IndexMut
特性实现的,这v[1]
是的语法糖*v.index(1)
。有了这些知识,我尝试运行以下代码:
use std::ops::{Index, IndexMut};
fn main() {
let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
*v.index_mut(*v.index(1)) = 999;
}
令我惊讶的是,这完美无缺!为什么第一个代码段不起作用,而第二个代码段却起作用?以我对文档的理解方式,它们应该是等效的,但事实并非如此。
2
通过代码出现来学习Rust?欢迎使用StackOverflow,并感谢您提出的重要问题!
—
Sven Marnach
精确地; )这是我这样做的第三年(在此之前是Haskell的2倍)〜>自从我开始对低级内容开始更加感兴趣以来,我就
—
想让
@LucasBoucke有趣的是,我通常在项目中使用Rust,但是我在Haskell中编写了此AoC。他们俩都是各自领域的杰出语言。
—
Boiethios