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

时间:2016-12-20 20:41:56

标签: rust lifetime

是否可以基于每个文件禁用Rust的生命周期省略,可能使用fill

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

1 个答案:

答案 0 :(得分:5)

  

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

没有

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

与此同时,您可以启用该lint并手动确保它为每个函数触发。

供参考,there are only 3 rules

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

  •   
  • 如果只有一个输入生命周期,无论是否已消除,那么该生命周期将被分配给所有退出的生命周期。   功能

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

  •   

或来自next major revision of The Rust Programming Language的替代词汇,可能会引起不同读者的共鸣:

  

函数参数的生命周期称为输入生命周期,和   返回值的生命周期称为输出生命周期。有一个   规则与Rust如何在没有的情况下推断输入生命周期有关   显式注释:

     
      
  1. 作为参考的每个参数都需要一个生命周期参数。换句话说,一个带有一个参数的函数   获取一个生命周期参数:fn foo<'a>(x: &'a i32),一个函数   两个参数获得两个不同的生命周期参数:fn foo<'a, 'b>(x: &'a i32, y: &'b i32),依此类推。
  2.         

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

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

      如果这三条规则都不适用,那么您必须明确   注释输入和输出生命周期。

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