小编Luc*_*cke的帖子

在嵌套数组索引中,“不能借为不可变,因为它也被借为可变”是什么意思?

在这种情况下,错误意味着什么:

fn main() {
    let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
    v[v[1]] = 999;
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
    v[v[1]] = 999;
}
Run Code Online (Sandbox Code Playgroud)

我发现索引是通过IndexIndexMut特性实现的,这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;
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这完美无缺!为什么第一个片段不起作用,但第二个片段起作用?我理解文档的方式,它们应该是等效的,但显然情况并非如此。

rust borrow-checker

16
推荐指数
1
解决办法
1816
查看次数

标签 统计

borrow-checker ×1

rust ×1