什么是用单撇号表示的Rust类型?

问题描述 投票:52回答:1

我在Rust中遇到过一些用单撇号表示的类型:

'static
'r
'a

撇号有什么意义?也许它是引用的修饰符(&)?特定于引用的泛型类型?我不知道这个文档隐藏在哪里。

rust
1个回答
43
投票

这些是Rust命名的生命周期。

引自The Rust Programming Language

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

生命周期注释不会改变所涉及的任何引用的生存时间。与签名指定泛型类型参数时函数可以接受任何类型的方式相同,当签名指定泛型生存期参数时,函数可以接受具有任何生命周期的引用。生命周期注释的作用是将多个引用的生命周期相互关联起来。

生命周期注释具有略微不寻常的语法:生命周期参数的名称必须以撇号'开头。生命周期参数的名称通常都是小写的,和泛型类型一样,它们的名称通常都很短。 'a是大多数人默认使用的名称。生命周期参数注释位于引用的&之后,空格将生命周期注释与引用的类型分开。

换句话说,寿命近似于执行范围,在该执行范围期间,参考指向的数据是有效的。 Rust编译器将保守地推断出可能安全的最短寿命。如果您想告诉编译器引用的寿命比最短估计长,您可以命名它,例如,输出引用与给定的输入引用具有相同的生命周期。

'static的生命是一个特殊的一生,是所有生命中最长寿的 - 在整个计划期间。一个典型的例子是字符串“文字”,它在程序/模块的生命周期中始终可用。

您可以从幻灯片29开始从this slide deck获取更多信息。

Lifetimes in Rust还在一定程度上讨论了生命周期。

© www.soinside.com 2019 - 2024. All rights reserved.