首页 文章

具有生命周期参数的特征是什么意思?

提问于
浏览
2

我理解生命周期参数如何应用于函数和结构,但是 trait 具有生命周期参数意味着什么?将生命周期参数引入其方法是一种捷径,还是其他什么?

1 回答

  • 4

    如果您有一个具有生命周期限制的特征,那么该特征的实现者可以参与相同的生命周期 . 具体而言,这允许您存储具有该生命周期的引用 . 它是 not 用于指定成员方法生命周期的快捷方式,疯狂和混乱的错误消息就是这样!

    trait Keeper<'a> {
        fn save(&mut self, v: &'a u8);
        fn restore(&self) -> &'a u8;
    }
    
    struct SimpleKeeper<'a> {
        val: &'a u8,
    }
    
    impl<'a> Keeper<'a> for SimpleKeeper<'a> {
        fn save(&mut self, v: &'a u8) { self.val = v }
        fn restore(&self) -> &'a u8 { self.val }
    }
    

    请注意struct和trait在生命周期中是如何参数化的,以及生命周期 is the same .

    对于SimpleKeeper <'a>,save()和restore()的非特征版本会是什么样的?

    实际上非常相似 . 重要的部分是struct存储引用本身,因此它需要为内部值赋予一个生命周期参数 .

    struct SimpleKeeper<'a> {
        val: &'a u8,
    }
    
    impl<'a> SimpleKeeper<'a> {
        fn save(&mut self, v: &'a u8) { self.val = v }
        fn restore(&self) -> &'a u8 { self.val }
    }
    

    他们的意思与特质版本完全相同吗?

    是的!

相关问题