- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Rust supports powerful local type inference in the bodies of functions, but it deliberately does not perform any reasoning about types for item signatures. However, for ergonomic reasons, a very restricted secondary inference algorithm called “lifetime elision” does apply when judging lifetimes. Lifetime elision is concerned solely with inferring lifetime parameters using three easily memorizable and unambiguous rules. This means lifetime elision acts as a shorthand for writing an item signature, while not hiding away the actual types involved as full local inference would if applied to it.
我不明白这是什么意思。什么是项目签名? “推断生命周期参数”是什么意思?一些示例或类比会有所帮助。
最佳答案
项目签名是给出函数名称和类型的位,即调用它所需的一切(无需知道它是如何实现的);例如:
fn foo(x: u32) -> u32;
这是另一个采用 &str
引用的方法:
fn bar<'a>(s: &'a str) -> &'a str;
在 Rust 中,所有引用都有一个附加的生命周期;这是类型的一部分。上面的 bar
函数不仅仅是“这个函数获取一个字符串的引用并返回另一个字符串”。它说“这个函数接受一个字符串引用,并返回另一个只要给定它就有效。这是 Rust 所有权系统的重要组成部分。
然而,每次都指定这些生命周期是很烦人和痛苦的,所以 Rust 有“生命周期省略”(即“不显式地写出它们”)。这意味着对于一些非常常见的情况,您可以省略生命周期注释,Rust 会隐式地为您添加它们。这纯粹是为了方便程序员,让他们不必在“明显”的情况下写那么多生命周期。
规则列于the book ,但为了完整起见,它们是:
fn f(x: &T, y: &U)
意思是:
fn f<'a, 'b>(x: &'a T, y: &'b U)
即这些生命周期之间没有自动链接。
struct U<'a> {} // struct with a lifetime parameter
fn f(x: &T) -> &U
变成:
fn f<'a>(x: &'a T) -> &'a U<'a>
&self
或 &mut self
(即它是一种方法),则所有省略的输出生命周期都相同作为 self
。这涵盖了方法返回对其字段之一的引用的常见情况。例如:impl S {
fn get_my_item(&self, key: &str) -> &str {}
}
变成:
fn get_my_item<'a,'b>(&'a self, key: &'b str) -> &'a str // use the self lifetime
文档中有更多示例。
关于rust - 用非常简单的术语来说,什么是生命周期省略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325690/
这是我在这里的第一篇文章,也是我第一次使用 C++。我正在查看从 Internet 获得的一些代码,但我对此有疑问。 它有一个 for 循环,像这样: for(cin >> t;t--;) 我明白它在
我目前正在开发一个网站,除其他外,该网站允许用户通过显示或隐藏他们已购买的商品来过滤市场。这适用于基本的 AJAX 调用,该调用传递可用过滤器的当前条件,然后使用 CodeIgniter 的事件记录构
我创建了一个 MWE,其中通过添加 来更改单行解决编译器错误。 以下代码无法编译: import java.util.List; public class MainClass { publi
当我想测试一些 PostgreSQL 函数 FOO() 的行为时,我发现执行类似 SELECT FOO(bar) 的查询很有用,bar一些数据我用作直接输入,而无需从真实表中SELECT。 我读到我们
在 PHP、Java、C++(以及许多其他语言)中,for 循环是这样使用的: for(int i=0;i<10;i++) 如果我已经初始化了i,我该如何省略初始化语句呢? 最佳答案 在 Java、C
我发现我们的 Android 应用出现了一个奇怪的问题,特别是在 4.4 版的 Moto X 上。 在偏好 Activity 中,所有标题的前 8 个字符都在开头用省略号截断。这也发生在溢出菜单和整个
我有一个 XElement,我必须解析它以删除结束标记中的空白。我的代码如下所示: var stringBuilder = new StringBuilder(); using (var string
假设我有两个接口(interface),X和 Y ,它们共享一些字段,但也有独立的字段: interface X { abc: number; foo: number; bar: numb
我有这个模型: var accountSchema = new mongoose.Schema({ 'seeker': { 'fullName': String,
我在 R 中运行一个具有大量时间和位置固定效应的回归。我尝试将一个漂亮的汇总表输出到 Latex 中。我从 stargazer 包切换到 huxtable,因为 stargazer 在忽略固定效果时表
假设我有一个数据框: a df a b c d 1 0 9 10 2 1 10 13 3 NA 11 14 4 3 NA 7 5 4 13 22 现在假设我
我在 R 中运行一个具有大量时间和位置固定效应的回归。我尝试将一个漂亮的汇总表输出到 Latex 中。我从 stargazer 包切换到 huxtable,因为 stargazer 在忽略固定效果时表
我想删除一个属性并返回一个新对象而不改变原始对象。 我知道我们可以像这样使用 Lodash 轻松做到这一点: const profile = { name: 'Maria', age: 30 } _.
我正在通过更改一些内容来修改 javascript 对象。当我重新创建它时,我会得到每个 key 对的索引号。 "0":{...},"1":{...}, 如何删除/省略这些 0、1、2、3、4 数字的
我正在一个非常方便且名称丰富的网站 here 上完成示例之一。 ,具体来说: func applyMutliplication(value: Int, multFunction: Int -> Int
这个问题在这里已经有了答案: Why do java source files require package declarations? (4 个答案) 关闭 6 年前。 我是 Java 的新手,
在下面的代码中: Widget makeWidget() { return Widget(); } void foo(Widget widget) { ... } foo(makeWid
这是我使用下面的调用调用的过程: CALL abc('01-04-2011','14-04-2014','28,29,36,37,38','33,34,35,41,42,43') 但问题是下面提到的查
嘿,我正在寻找一种在 yui 数据表中省略文本的好方法。我的意思是,格式化文本,使其很好地适合其单元格,并且如果文本必须被 chop ,则在其后面有一个椭圆 (...)。 我想在不使用 CSS 选择器
我有一个如下表(记录)。 ID Status AA124 Pass AA125 Pass Z_AA134 Fail Z_AA135
我是一名优秀的程序员,十分优秀!