能否禁用Rust的生命周期省略?

9

是否可以在每个文件中禁用Rust的生命周期省略,可能使用#[attribute]

我正在学习有关生命周期的知识,我认为这可能会有所帮助。

1个回答

7

是否可以在每个文件上禁用Rust的生命周期省略

不行。

我能提供的最佳替代方案是请求Clippy功能,它是needless_lifetimes的相反,并启用它。我不知道其他人是否想要这样的请求。

同时,您可以启用该lint并手动确保它对每个函数都起作用。


作为参考,这里只有3条规则

函数或方法参数上的生命周期被称为“输入生命周期”,返回值上的生命周期被称为“输出生命周期”。编译器使用三条规则来确定引用在没有明确注释时具有的生命周期。第一条规则适用于输入生命周期,第二和第三条规则适用于输出生命周期。如果编译器在三条规则的结尾仍然存在无法确定生命周期的引用,则编译器将停止并显示错误。这些规则适用于fn定义以及impl块。第一个规则是每个引用参数都获得自己的生命周期参数。换句话说,具有一个参数的函数会获得一个生命周期参数:fn foo<'a>(x: &'a i32); 具有两个参数的函数会获得两个独立的生命周期参数:fn foo<'a, 'b>(x: &'a i32, y: &'b i32); 以此类推。第二个规则是如果只有一个输入生命周期参数,则该生命周期将分配给所有输出生命周期参数:fn foo<'a>(x: &'a i32) -> &'a i32。第三条规则是如果有多个输入生命周期参数,但其中一个是self或mut self因为这是一个方法,则self的生命周期将分配给所有输出生命周期参数。这第三条规则使方法更易于阅读和编写,因为需要更少的符号。
值得一提的是,在 Rust 1.0 版本之前,这三条生命周期省略规则并不存在,只存在第一条规则。然而,标准库中使用引用的函数和方法中约有87%都符合这三个省略规则,因此它们被采纳。生命周期省略是常见情况。

2
小提示:第一个省略规则已存在。另外两个规则消除了标准库中87%显式生命周期的需要。 - Steve Klabnik

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