我遇到过许多用单撇号表示的 rust 迹类型:

'static
'r
'a

那个撇号的意义是什么?也许是参考文献的修饰语(&)?特定于引用的泛型类型?我不知道这些文件藏在哪里.

推荐答案

这是Rust的命名生命周期 .

引用The Rust Programming Language的话:

Rust中的每个引用都有一个生命周期,这是该引用的有效范围.大多数时间生命是隐式的和推断的,就像大多数时间类型是推断的一样.与由于可能存在多种类型而必须注释类型类似,在某些情况下,引用的生存期可能以几种不同的方式关联,因此Rust需要我们使用通用生存期参数注释关系,以便确保运行时使用的实际引用一定有效.

生命周期注释不会更改任何引用的时间长度

生命周期注释有一个稍微不同寻常的语法:

换句话说,一个生命周期近似于参考点所指向的数据有效的执行时间.Rust编译器将保守地推断出最短的安全使用生命周期 .如果你想告诉编译器一个引用的生命周期比最短估计值长,你可以给它命名,比如说输出引用的生命周期与给定的输入引用的生命周期相同.

'static生命周期 是一种特殊的生命周期 ,是所有生命周期 中最长的——在项目期间.一个典型的例子是在程序/模块的生命周期内始终可用的字符串"文本".

从第29张幻灯片开始,您可以从this slide deck页获得更多信息.

Lifetimes in Rust还深入讨论了生命周期.

Rust相关问答推荐

是否有一种可靠的方法可以将Arc弦乐转换/转换为Arc Vec u8>>

给定使用newype习语定义的类型上的铁 rust Vec,有没有方法获得底层原始类型的一部分?

如何从polars DataFrame中获取一个列作为Option String?<>

如果A == B,则将Rc A下推到Rc B

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

什么时候铁 rust FFI边界上的panic 是未定义的行为?

你是如何在铁 rust 一侧的金牛座获得应用程序版本的?

使用Py03从Rust调用Python函数时的最佳返回类型

避免在Collect()上进行涡鱼类型的涂抹,以产生<;Vec<;_>;,_>;

在铁 rust 中,如何一次只引用几件事中的一件?

这是什么:`impl Trait for T {}`?

Rust proc_macro 和 syn:解析空格

如何重命名 clap_derive 中的子命令占位符?

Rust:为什么 &str 不使用 Into

在 Rust 中查找向量中 dyn struct 的索引

Rust 1.70 中未找到 Trait 实现

从 Rust 中的 if/else 中的引用创建 MappedRwLockWriteGuard

切片不能被 `usize` 索引?

&str 的编译时拆分是否可能?

在使用大型表达式时(8k 行需要一小时编译),是否可以避免 Rust 中的二次编译时间?