2016-04-26 93 views
0

我想写一个返回矢量的第一个元素的简写功能的第一个项目:返回矢量

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

这当然失败:

error: missing lifetime specifier [E0106]

有什么办法做这个工作?

回答

4

不处于当前状态..没有。

基本上,当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() 
} 

这似乎是多余的,虽然所以不知道你想做到这一点正是似乎是一个不错的选项。

如果你扩大你的问题,我会扩大我的答案。

+0

这里是一个更好的例子:https://play.rust-lang.org/?gist=a44bfda4a8b6b6f31dbafdd582d82080&version=stable&backtrace=0 - 但我想答案仍然是“不“,这是我非常期待的。谢谢! :) – jgillich

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