是否可以禁用Rust的终身省略?

Tim*_*mmm 4 lifetime rust

是否可以在每个文件的基础上禁用Rust的生命周期省略,也许可以使用#[attribute]

我正在学习有生之年,我认为这可能会有所帮助.

She*_*ter 5

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

没有.

我可以提供的最佳选择是请求与之相反的Clippy功能,needless_lifetimes然后启用它.我不知道其他人是否会想要这样的请求.

在此期间,您可以启用该lint并手动确保它为每个函数触发.


仅供参考,只有3条规则:

  • 函数参数中的每个省略生命周期都成为不同的生命周期参数.

  • 如果只有一个输入生命周期,无论是否省略,那么该生命周期将被分配给该函数的返回值中的所有省略的生命周期.

  • 如果有多个输入生命周期,但其中一个是&self&mut self,则将生命周期self分配给所有省略的输出生命周期.

或者来自下一个主要版本的The Rust Programming Language的替代措辞,这可能会引起不同读者的共鸣:

函数参数的生命周期称为输入生命周期,返回值的生命周期称为输出生存期.有一条规则与Rust在缺少显式注释时如何推断输入生命周期有关:

  1. 作为引用的每个参数都需要一个生命周期参数.换句话说,具有一个参数的函数获得一个生命周期参数:fn foo<'a>(x: &'a i32)具有两个参数的函数获得两个单独的生命周期参数:fn foo<'a, 'b>(x: &'a i32, y: &'b i32)等等.

两个与输出生命周期相关的规则:

  1. 如果只有一个输入生命周期参数,则将该生命周期分配给所有输出生命周期参数:fn foo<'a>(x: &'a i32) -> &'a i32.
  2. 如果有多个输入生命周期参数,但其中一个是&self&mut self,则生命周期self是分配给所有输出生命周期参数的生命周期.这使得编写方法更好.

如果这三个规则都不适用,则必须明确注释输入和输出生命周期.


对于它的价值,在Rust 1.0之前,这三个终身省略规则并不存在,只有第一个.但是,标准库中使用引用的所有函数和方法的87%都被3个省略规则所涵盖,这就是它们被采用的原因.终身省略是常见的情况.

  • 小提示:存在第一个省略规则。额外的两条规则消除了对标准库中使用的 87% 的显式生命周期的需要。 (2认同)