首页 > 解决方案 > 具有多个生命周期参数的结构的真实示例是什么?

问题描述

我是 Rust 的新手,但我认为我对生命周期参数的概念理解得很好。当通过引用接受多个参数时,我可以看到这对方法非常有用。但是,我想不出一个结构会引用两个具有不同生命周期的不同变量的示例。Rust 书没有提供具有多个生命周期的结构的示例。

围绕Elision 2.0的讨论指的是“具有单个生命周期参数的结构”,并且专注于使使用只有一个生命周期参数的类型更容易,这表明这是生命周期最常见的用例 - 要么结构没有生命周期,或者它只有一个生命周期。

谁能为我提供一个具有多个生命周期参数的结构的实际示例?

标签: rustlifetime

解决方案


当您在结构中使用引用时,您使用的是生命周期。

有时您可以对结构的各种引用使用相同的生命周期,但您不能总是这样做。

生命周期是对值存在的时间(在创建和删除之间)的引用。这是借用检查器将检查的约束。如果您为两个字段提供相同的生命周期,则您添加了一个通常无法验证的约束,从而限制了您的结构的可能用途。

这是一个真实世界的例子

pub struct DisplayableLine<'s, 'l, 'p> {
    pub skin: &'s MadSkin,
    pub line: &'p FmtLine<'l>,
    pub width: Option<usize>, // available width
}

结构本身通常是短暂的。皮肤和线条来自不同的起源。你可以有一个你只是为了展示而制作的皮肤,并且你想立即放弃它。或者你在保持皮肤时刚刚制作的一条线。为两个字段提供相同的生命周期将比必要的限制更多。

当然,当您的结构总是引用一起创建和删除的值时,没有必要拥有两个生命周期。但在实践中,这种情况很少见。


推荐阅读