首页 > 解决方案 > 如何在不获取所有权的情况下为 Rust 切片命名?

问题描述

在加密问题的上下文中,为了减少冗长,我“命名”了vas的block一部分,对其进行了一些处理,然后尝试验证整个ofdo_stuff的结果:v

fn x() {
    let mut v = vec![0; 32];
    let block = &mut v[0..16];

    do_stuff(block);
    check_stuff(&v);
    do_stuff(block);
}

fn do_stuff(_: &mut [i32]) {}
fn check_stuff(_: &[i32]) {}

借阅检查员抱怨:

error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
 --> src/lib.rs:6:17
  |
3 |     let block = &mut v[0..16];
  |                      - mutable borrow occurs here
...
6 |     check_stuff(&v);
  |                 ^^ immutable borrow occurs here
7 |     do_stuff(block);
  |              ----- mutable borrow later used here

我知道这是试图提供的那种保证。但是,假设我知道自己在做什么,是否有一种惯用的方式来给切片命名,而不必do_stuff(&mut v[0..16])每次都使用或复制?

标签: rustsliceownership

解决方案


推荐阅读