rust - 具有多个生命周期参数的结构的真实示例是什么?
问题描述
我是 Rust 的新手,但我认为我对生命周期参数的概念理解得很好。当通过引用接受多个参数时,我可以看到这对方法非常有用。但是,我想不出一个结构会引用两个具有不同生命周期的不同变量的示例。Rust 书没有提供具有多个生命周期的结构的示例。
围绕Elision 2.0的讨论指的是“具有单个生命周期参数的结构”,并且专注于使使用只有一个生命周期参数的类型更容易,这表明这是生命周期最常见的用例 - 要么结构没有生命周期,或者它只有一个生命周期。
谁能为我提供一个具有多个生命周期参数的结构的实际示例?
解决方案
当您在结构中使用引用时,您使用的是生命周期。
有时您可以对结构的各种引用使用相同的生命周期,但您不能总是这样做。
生命周期是对值存在的时间(在创建和删除之间)的引用。这是借用检查器将检查的约束。如果您为两个字段提供相同的生命周期,则您添加了一个通常无法验证的约束,从而限制了您的结构的可能用途。
pub struct DisplayableLine<'s, 'l, 'p> {
pub skin: &'s MadSkin,
pub line: &'p FmtLine<'l>,
pub width: Option<usize>, // available width
}
结构本身通常是短暂的。皮肤和线条来自不同的起源。你可以有一个你只是为了展示而制作的皮肤,并且你想立即放弃它。或者你在保持皮肤时刚刚制作的一条线。为两个字段提供相同的生命周期将比必要的限制更多。
当然,当您的结构总是引用一起创建和删除的值时,没有必要拥有两个生命周期。但在实践中,这种情况很少见。
推荐阅读
- java-8 - 是否需要关闭 java 8 中的流才能运行中间操作,并且 close() 是终端操作
- jquery - 如何使用“this”jquery 选择器切换二级类
- azure-data-factory - ADF v1 和 v2 如何处理和签入公司名称
- c# - 有没有一种方法可以让我计算他们每周的星期几创建的所有数据条目的数量
- r - 从 coxph 中提取 P 值
- python - Python:具有特殊字符的密码检查器
- controller - 无法在 CAN 上通信(NUC472 开发套件)
- android - 应用程序在后台/未运行时如何设置自定义通知声音?
- tendermint - 如何停止tendermint节点
- python - Python - Selenium - 单击特定选项卡