我有以下代码片段(不要质疑它们的意义;))
1.递归获取Vec的第n个元素
fn helper<T: Clone>(n: usize, current_n: usize, current_xs: &Vec<T>, accumulator: Option<T>) -> Option<T> {
if current_n > n {
accumulator
} else {
let head = current_xs.get(0).cloned();
let tail = current_xs.clone().into_iter().skip(1).collect();
return helper(n, current_n + 1, &tail, head);
}
}
2. 递归获取 Vec 的长度
fn helper<T: Clone>(current_xs: &Vec<T>, accumulator: usize) -> usize {
if current_xs.is_empty() {
accumulator
} else {
let tail = current_xs.clone().into_iter().skip(1).collect();
return helper(tail, accumulator + 1)
}
}
我的问题是关于那条线:
let tail = current_xs.clone().into_iter().skip(1).collect();
在第一个示例中,tail
变量是 Type Vec<T>
,在第二个示例中,tail
变量是 type &Vec<?>
。
问题:
- 为什么?为什么返回两种不同类型的确切代码行?
- 如何
Vec<T>
在第二个示例中返回 a ?