【发布时间】:2017-07-13 18:34:41
【问题描述】:
使用切片语法访问切片很简单: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>?
【问题讨论】:
-
请发布minimal reproducible example,因为它应该可以工作,但如果没有明确的示例,很难理解您未显示的代码可能有什么问题。此 MCVE 还应包括您从编译器获得的错误消息。