您的'a 完全放错了位置。
生命周期总是与引用一起使用,所以如果你有一个&Vec<Vec<bool>>,那么生命周期'a 就在& 之后。你不需要也不应该撒&nilly-willy,因为你拥有的东西(i32)和你引用的东西(&i32)之间有非常明显的区别。
因此,您的函数的正确版本就是:
fn subset<'a>(csv: &'a Vec<Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> {
indices.iter().map(|&i|&csv[i]).collect()
}
注意:我删除了collect 之后的分号,因为你想返回那个表达式的值。
我们可以使用这个函数:
fn main() {
let vec = vec!(
vec!(false, false, false),
vec!(false, false, true ),
vec!(false, true , true ),
vec!(false, true , false),
vec!(true , true , false),
vec!(true , true , true ),
vec!(true , false, true ),
vec!(true , false, false)
);
let indices = vec!(1, 3, 5, 7);
let sub = subset(&vec, &indices);
println!("{:?}", sub);
}
哪个produces:
[[false, false, true], [false, true, false], [true, true, true], [true, false, false]]