Если я попробую это:
let vector = vec![1, 2, 3];
let slice = vector[1..2];
Я получаю ошибку компилятора:
error[E0277]: the trait bound `[{integer}]: std::marker::Sized` is not satisfied
--> src/main.rs:3:9
|
3 | let slice = vector[1..2];
| ^^^^^ ------------ help: consider borrowing here: `&vector[1..2]`
| |
| `[{integer}]` does not have a constant size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `[{integer}]`
= note: all local variables must have a statically known size
Я понял, что нам нужно let slice = &vector[1..2]
, как любезно предлагает компилятор. Это имеет смысл: срез всегда получен из другого значения, поэтому вам нужно позаимствовать вектор в этом примере.
Однако я попробовал это:
let vector = vec![1, 2, 3];
let borrowed_vector = &vector;
let slice = borrowed_vector[1..2];
и я вернулся к той же ошибке.
Я спрашиваю, потому что кажется немного странным требовать синтаксиса &vector[]
, если на самом деле всегда требуется заимствование (&
).