返回带引用的结构Vec时的生命周期参数数量错误

时间:2016-04-25 14:11:49

标签: rust

我有一个带有引用的结构:

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 个答案:

答案 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的对象的引用。