Rust 生命周期规则(一)
生命周期省略规则
rust编译器一些情况下允许用户省略生命周期的标注,使代码更加清晰、易读。它的生命周期省略规则总共有3条,这些规则并不需要程序员明确遵守,编译器只是在程序员写出符合这些规则的代码时允许省略省略周期标注,由编译器在编译阶段辅助添加。
- 每个引用参数都会拥有自己的生命周期参数
- 当只存在一个输入生命周期参数时,这个生命周期会被赋予给所有输出的生命周期参数
- 当拥有多个输入生命周期参数时,而其中一个是&self或&mut self时,self的生命周期会被赋予给所有的输出生命周期参数。这个规则使方法实现更加易于阅读和编写,它允许程序员省略一些不必要的标注。
第一条规则作用于输入生命周期,第二、三条规则作用于输出生命周期。当编译器检查完这3条规则后仍有无法计算出的生命周期引用时,编译器就会停止运行并抛出错误;此时需要由程序员手动完成出错的生命周期标注。
- 第一条规则示例:
fn foo(x: &u32, y: &u32, z: &u32)
等价于fn foo<'a, 'b, 'c>(x: &'a u32, y: &'b u32, z: &'c u32)
; - 第二条规则示例:
fn foo(x: &u32, y: u64) -> (&u32, &u64)
等价于fn foo<'a>(x: &'a u32, y: u64)-> (&'a u32, &'a u64)
; - 第三条规则示例:
fn foo(&self, x: &u32, y: &u64) -> &u32
等价于fn foo<'a, 'b, 'c>(&'a self, x: &'b u32, y: &'c u64) -> &'a u32
发布评论