如果我尝试这样做:
我遇到了一个编译器错误:
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[]
语法似乎有点奇怪。