參考

2016-04-25 86 views
1

返回VEC結構的當數錯誤的壽命參數我有一個基準的結構在它:參考

pub struct ScheduledItem<'a> { 
    pub item: &'a item::Item, 
    pub timeshift: i32 
} 

現在我希望編寫返回引用的VEC這種結構的函數:

pub fn items_with_times<'a>(items: &Vec<ScheduledItem>) -> Vec<(u32, &'a ScheduledItem)> { 

但我得到的是一個錯誤:

src/scheduled_item.rs:25:74: 25:87 error: wrong number of lifetime parameters: expected 1, found 0 [E0107] 
src/scheduled_item.rs:25 pub fn items_with_times<'a>(items: &Vec<ScheduledItem>) -> Vec<(u32, &'a ScheduledItem)> { 
                            ^~~~~~~~~~~~~ 

是不是&'a就夠了嗎?這裏有什麼問題?

+1

你可以試試'&'一個ScheduledItem <'a>' – WiSaGaN

回答

2

你的結構有一個通用的生命週期參數。在Rust中,您需要指定所有通用參數(例如,您不能返回Vec,只是Vec<T>)。所以,你的返回類型應該是Vec<(u32, ScheduledItem<'a>)>和您的參數類型應該是&[ScheduledItem<'a>],因爲還有的&Vec<T>超過&[T]

Isn't &'a enough?

&'a T沒有好處規定了它與壽命'aT一個參考,這意味着對象它指向不起作用'a

,另一方面T<'a>指定您的T<'a>不會活得比'a。這又意味着該類型的任何對象都不會超過'a,並且該對象不能包含對比生活時間短於'a的對象的引用。