2016-04-26 90 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() 
}