使用切片语法访问切片很简单:slice = vector[i..j]
但如果范围是存储的,则无法执行以下操作:
struct StructWithRange {
range: std::ops::Range<usize>,
}
fn test_slice(s: &StructWithRange, vector: &Vec<i32>) {
let slice = &vector[s.range];
println!("{:?}", slice); // prints [2, 3]
}
fn main() {
let vector = vec![1,2,3,4,5];
let s = StructWithRange {
range: 1..3
};
test_slice(&s, &vector);
}
这会出现错误:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:6:25
|
6 | let slice = &vector[s.range];
| ^ cannot move out of borrowed content
有没有一种方法可以在不扩展范围的情况下获取范围的切片?
例如:vector[s.range.start..s.range.end]
如果结构体中的usize
可以用于索引查找,为什么不能以同样的方式使用Range<usize>
?