Self: Sized + 'a 

T: T + 'a

Seen this syntax while following a tut或ial which suggests using rust 2018 edition instead of 2021 if it is related to your answer. However, I can not find the meaning of + lifetime parameter syntax.

推荐答案

这意味着您在泛型中使用的任何类型都必须超过'a,这意味着它包含的所有引用都必须超过'a.以下是一些永远有效的类型.

i32                 // contains no lifetimes, so all zero lifetimes outlive 'a
Vec<u8>             // same as above
&'static str        // 'static outlives all lifetimes
SomeStruct<'static> // same as above

这里有一些类型,只有当他们的生命周期 超过'a岁时才会起作用.

Vec<&'b u8>               // 'b must outlive 'a
&'c str                   // 'c must outlive 'a
SomeStruct<'d>            // 'd must outlive 'a
AnotherStruct<'x, 'y, 'z> // all lifetimes must outlive 'a

这最常与+ 'static一起使用,这意味着"所有包含的生命周期 必须是'static".您还可以在像Box<dyn Error + 'a>这样的特征对象和像impl Iterator<Item = u8> + 'a这样的impl Trait类型上看到它,在这些对象中,它的意思是"该类型只存在'a年",就像常规的生命周期参数一样.

我认为,自2018年版以来,这方面没有任何变化.

Rust相关问答推荐

默认特征实现中的生命周期问题

有没有一种惯用的方法来判断VEC中是否存在变体?

作为1字节位掩码的布尔值 struct

JSON5中的变量类型(serde)

为什么&;mut buf[0..buf.len()]会触发一个可变/不可变的borrow 错误?

根据填充系数以相对大小在给定空间中布局项目

习语选项<;T>;到选项<;U>;当T->;U用From定义

要求类型参数有特定的大小?

Rust 中多个 & 符号的内存表示

decltype、dyn、impl traits,重构时如何声明函数的返回类型

为什么 Rust 的临时值有时有参考性有时没有?

分配给下划线模式时会发生什么?

在 Rust 中实现资源消耗的安全包装器

为什么1..=100返回一个范围而不是一个整数?

为什么在 rust 中删除 vec 之前应该删除元素

如何获取包裹在 Arc<> 和 RwLock<> 中的 Rust HashMap<> 的长度?

从函数返回 u32 的数组/切片

如何为返回正确类型的枚举实现 get 方法?

使用 `.` 将 T 转换为 &mut T?

Rust 生命周期:不能在方法内重新borrow 可变字段