返回矢量的第一项

时间:2016-04-26 22:01:15

标签: rust

我试图写一个返回向量的第一个元素的速记函数:

pub fn first() -> Option<&T> {
    let v = Vec::new();
    v.first()
}

当然失败了:

  

错误:缺少生命周期说明符[E0106]

有没有办法让这项工作?

3 个答案:

答案 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()
}