Rust编译器有没有获取省略生命周期参数的方法?

8

假设已经有一个编译正确的Rust程序,我可以让编译器告诉我省略的生命周期被推断为什么吗?


3
实际上,这被称为生命周期省略,你可以在这里找到规则:https://doc.rust-lang.org/stable/nomicon/lifetime-elision.html。 - Tibor Benke
1
@TiborBenke 当然,“省略”是代码作者所做的事情;编译器可以推断出被省略的值。无论如何,我并不是指“哪些生命周期被省略了” - 这应该因它们的缺失而显而易见,我的意思是这些生命周期的值是什么?已更新问题以反映这一点。 - Peter Hall
1
@TiborBenke 我想你真正想表达的是省略规则非常简单,以至于生命周期可以轻松推断:只有一个生命周期需要考虑,并且它在所有生命周期位置都被使用。 - Peter Hall
1
是的,编译器遵循这些规则来推断/扩展具体的生命周期。 - Tibor Benke
1个回答

4

编译器(目前)可以允许省略生命周期的情况非常简单,因此编译器对于推断出的内容没有太多可告知的:

对于一个函数,所有省略的生命周期都具有相同的值。

编译器不接受在需要做出选择的情况下使用省略生命周期。例外情况是在方法中,但将所有生命周期绑定到self几乎总是预期的结果,因此这种假设是有意义的。

[1] 如果Rust的未来版本对省略生命周期执行更复杂的推断,则该问题可能会有一个远非微不足道的答案。例如,编译器可以分析整个代码库以推断所有函数(或implstruct,如果在那里也允许省略)的连贯生命周期集合。


3
如果 Rust 的未来版本[...] -- 这种情况很不可能发生,因为 Rust 倾向于显式的代码。添加生命周期推导的原因是它只需少量简单规则就能清理掉约87%使用生命周期的情况。 - Shepmaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接