当前位置: 首页 > 知识库问答 >
问题:

用单个撇号表示的标识符是什么?

戚翰飞
2023-03-14

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

'static
'r
'a

那个撇号的意义是什么?可能是引用的修饰符(


共有2个答案

徐唯
2023-03-14
匿名用户

为了补充quux00的优秀答案,命名生存期还用于指示向rust编译器返回的借用变量的来源。

这个函数

pub fn f(a: &str, b: &str) -> &str {
  b
}

不会编译,因为它返回一个借用的值,但没有指定它是从a还是b借用的。

要解决这个问题,您需要声明一个命名的生存期,并对< code>b使用相同的生存期和返回类型:

pub fn f<'r>(a: &str, b: &'r str) -> &'r str {
//      ----              ---         ---
  b
}

并按预期使用它

f("a", "b")

郭乐意
2023-03-14

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

引用Rust编程语言:

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

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

生存期注释的语法略有不同寻常:生存期参数的名称必须以撇号 '开头。生存期参数的名称通常都是小写的,并且像泛型类型一样,它们的名称通常很短。'a 是大多数人用作默认值的名称。生存期参数注释位于

换句话说,生存期近似于引用指向的数据有效的执行范围。Rust 编译器将保守地推断出最短的生存期是安全的。如果要告诉编译器某个引用的生存期比最短估计值长,则可以对其进行命名,例如,表示输出引用与给定输入引用具有相同的生存期。

'静态生命周期是一个特殊的生命周期,是所有生命周期中最长的生命周期——在程序的持续时间内。一个典型的例子是在程序/模块的生命周期内始终可用的字符串“文字”。

从第29张幻灯片开始,您可以从该幻灯片中获得更多信息。

Rust中的寿命也深入讨论了寿命。

 类似资料:
  • 问题内容: 该 逃生() 函数,已被废弃,取而代之 encodeURIComponent方法 ,但 encodeURIComponent方法 不编码单引号/单引号字符。我需要使用AJAX格式来避免姓氏(例如“ O’Neill”)中的撇号。他们为什么要消除他们试图改善的东西的能力? 编辑: 因此,这是一个代码示例,可以更彻底地说明问题。因此,您可以看到姓“ O’Neill”包含一个撇号,当在url中

  • 问题内容: 在阅读Hibernate文档时,我不断看到对 自然标识符 概念的引用。 这是否仅表示实体因其拥有的数据的性质而具有的ID? 例如,用户名+密码+年龄+某些内容用作复合标识符? 问题答案: 在Hibernate中,自然键通常用于查找。在大多数情况下,您将拥有一个自动生成的代理ID。但是,此ID对于查找而言毫无用处,因为您将始终通过名称,社会保险号或其他来自现实世界的字段进行查询。 在使用

  • 问题内容: 以下两个查询给出完全不同的结果的原因是什么? 我已经在Google周围搜索了反引号和撇号(又称为单引号)之间的区别,但是我找不到任何迹象表明为什么对于像上列这样的列名它们会有不同的解释。 难道实际上不是将后一个查询中的单引号字符串解释为列名,而是解释为任意字符串文字,可以说其为“ 1”吗?如果是这样,要找到任何有关撇号含义的页面并不容易。 问题答案: “价格”(撇号或引号)是一个字符串

  • 问题内容: 我正在尝试解析一个字符串,我需要使用子字符串来做到这一点。该字符串包含撇号字符。我的问题是,如何使用temp来获取String.indexOf以获取撇号字符的索引? 问题答案: 您的变量名错误(是保留字),应使用转义符:

  • 我试图找出从字符串中删除所有标点符号和空格的正确方法,但保留撇号不变,例如: 不会留下来,但“欲望”会变成“欲望”。 我试过使用

  • 我正试图更深入地学习R中的正则表达式。我给自己做了一件我认为很容易的事,我想不出来。我想提取所有4个字母的单词。在这四个字母的单词中,我想忽略(不算)撇号。我可以在没有正则表达式的情况下完成这项工作,但需要正则表达式解决方案。这是一个MWE和我尝试过的: **期望输出:** 我以为第二种模式会工作,但它也抓取包含5个字符的单词。