Как я могу дать имена кусочкам Rust, не вступая в права собственности? - PullRequest
0 голосов
/ 07 июня 2019

В контексте криптографической проблемы, чтобы уменьшить многословность, я «называю» фрагмент v как block, что-то с ним делаю, но затем пытаюсь проверить результат do_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]) или делать копии каждый раз?

...