Rust函数签名中&'_与&是否等价?Formatter<'_>标注是否冗余?
Rust中&'_ something与&something的等价性及fmt::Formatter<'_>的冗余性问题
1. &'_ something 和 &something 是否等价?
在Rust函数签名中,&'_ something 和 &something 是完全等价的。
当你写&something时,编译器会自动为其推断一个匿名生命周期;而'_是Rust中用来显式表示这个匿名生命周期的语法糖。两者在语义上没有任何区别,只是写法不同——一个是编译器自动推断,一个是开发者显式写出。
2. fmt::Formatter<'_> 的生命周期标注是否冗余?
你提到的let x: _ = 1和let x = 1等价的逻辑,在这里同样适用:fmt::Formatter<'>中的<'>是冗余的。
在fmt方法的参数f: &mut fmt::Formatter<'_>里,'_代表的是编译器会自动推断的匿名生命周期。如果你省略掉<'>,直接写成&mut fmt::Formatter,编译器会自动为fmt::Formatter补全对应的匿名生命周期,代码的功能和编译结果完全一致。
不过有时候开发者会显式写出<'_>,主要是为了代码可读性,让其他开发者一眼就能注意到这里存在生命周期关联,但从语法规则和编译角度来说,这个标注确实可以省略。
内容的提问来源于stack exchange,提问作者rollingbee
相关产品推荐
相关产品推荐

