我试图写一个返回向量的第一个元素的速记函数:
pub fn first() -> Option<&T> {
let v = Vec::new();
v.first()
}
当然失败了:
错误:缺少生命周期说明符[E0106]
有没有办法让这项工作?
答案 0 :(得分:5)
不在当前状态..没有。
基本上,当first()
在此处返回时,v
将被删除。这使得返回一个不安全的函数的引用,因为现在引用指向一个void。
一个选项是传递向量并返回对第一个项目的引用:
fn main () {
let v = vec![1,2,3,4];
println!("{:?}", first(&v).unwrap()); // Prints 1
}
fn first<T>(v: &Vec<T>) -> Option<&T> {
v.first()
}
这似乎是多余的,所以如果不知道你正在尝试做什么,这似乎是一个不错的选择。
如果你扩展你的问题,我会扩展我的答案。
答案 1 :(得分:4)
要获取没有副本的第一个元素:
vec.into_iter().nth(0)
但是它将破坏向量。
答案 2 :(得分:0)
也许这可以帮到你
pub fn first<T>(v: &Vec<T>) -> Option<&T> {
let mut v_temp = Vec::new();
//some work on v
v_temp.first().cloned()
}
pub fn first1() -> Option<u8> {
let mut v: Vec<u8> = Vec::new();
//some work on v
v.push(1);
v.first().cloned()
}