【发布时间】:2018-10-09 05:58:17
【问题描述】:
如果我试试这个:
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[] 语法似乎有点奇怪。
【问题讨论】: