将枚举的生存期指定为返回类型

时间:2019-05-01 19:24:14

标签: enums rust signature

我不知道为$('.typeahead-input').on('typeahead:beforeopen', function() { return false; }); 返回类型get_best_slide指定生存期的正确方法。该枚举始终引用Enumbest_h之一。

除了返回类型为best_v之外,它看起来与official doc中的longest函数示例非常相似。

Enum

编译器不满意:

pub enum Image {
    Horizontal { image_id: usize },
    Vertical { image_id: usize },
}

pub enum Slide<'a> {
    H { h: &'a Image },
    V { v: &'a Image, other_v: &'a Image },
}

fn get_best_slide<'a>(
    best_score_h: usize,
    best_h: Option<&'a Image>,
    best_score_v: usize,
    best_v: Option<(&'a Image, &'a Image)>,
) -> &'a Option<Slide> {
    match (best_h, best_v) {
        (None, None) => None,
        (Some(h), None) => Some(Slide::H { h }),
        (None, Some((v0, v1))) => Some(Slide::V { v: v0, other_v: v1 }),
        (Some(h), Some((v0, v1))) => {
            if best_score_h >= best_score_v {
                Some(Slide::H { h })
            } else {
                Some(Slide::V { v: v0, other_v: v1 })
            }
        }
    }
}

也许我指定的生命周期参数不在正确的位置?

  • error[E0106]: missing lifetime specifier --> src/main.rs:16:17 | 16 | ) -> &'a Option<Slide> { | ^^^^^ expected lifetime parameter | = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `best_h` or `best_v` 看起来不对
  • 我也尝试过&'a Option<Slide>(编译器同样抱怨)

1 个答案:

答案 0 :(得分:2)

它需要Slide的寿命参数,您需要对其进行显式设置

 -> Option<Slide<'a>> 

区别是:

  • &'a Option<Slide>意味着我将在Option<Slide>的整个生命周期内借入'a
  • Option<Slide<'a>>意味着我将在生存期Slide中创建'a,以便内部操作可以显式使用此生存期。