是否可以基于每个文件禁用Rust的生命周期省略,可能使用fill
?
我正在学习有生之年,我认为这可能有所帮助。
答案 0 :(得分:5)
是否可以基于每个文件禁用Rust的生命周期省略
没有
我可以提供的最佳选择是请求needless_lifetimes
的相反的Clippy功能,然后启用它。我不知道其他人是否会想要这样的请求。
与此同时,您可以启用该lint并手动确保它为每个函数触发。
函数参数中的每个省略生命周期都成为一个不同的生命周期参数。
如果只有一个输入生命周期,无论是否已消除,那么该生命周期将被分配给所有退出的生命周期。 功能
如果有多个输入生命周期,但其中一个是
&self
或&mut self
,则self
的生命周期将分配给所有省略的输出 寿命。
或来自next major revision of The Rust Programming Language的替代词汇,可能会引起不同读者的共鸣:
函数参数的生命周期称为输入生命周期,和 返回值的生命周期称为输出生命周期。有一个 规则与Rust如何在没有的情况下推断输入生命周期有关 显式注释:
- 作为参考的每个参数都需要一个生命周期参数。换句话说,一个带有一个参数的函数 获取一个生命周期参数:
醇>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之前,这3个生命周期的省略规则不存在,只有第一个。但是,标准库中使用引用的所有函数和方法的87%都被3个省略规则所涵盖,这就是它们被采用的原因。终身省略是常见的案例。