我有一个带有引用的结构:
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
不够吗?这有什么不对?
答案 0 :(得分:2)
您的struct具有通用的生命周期参数。在Rust中,您需要指定所有通用参数(例如,您无法返回Vec
,只能返回Vec<T>
)。因此,您的返回类型应为Vec<(u32, ScheduledItem<'a>)>
,并且您的参数类型应为&[ScheduledItem<'a>]
,因为&Vec<T>
对[{1}}
Isn&#39; t
&[T]
足够吗?
&'a
指定它是&'a T
生命周期'a
的引用,这意味着对象指向的不是&#39 ; t outlive T
。
'a
指定您的T<'a>
类型的寿命不超过T<'a>
。这反过来意味着该类型的任何对象都不会超过'a
,并且该对象不能包含对短于'a
的对象的引用。