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