Rust 在函数中包含派生的结构上,“single_use_lifetimes”是什么意思?如何解决它? #![警告(单次使用寿命)] fn do_foo(){ #[导出(调试)] 结构Foo{ | ^^ |

Rust 在函数中包含派生的结构上,“single_use_lifetimes”是什么意思?如何解决它? #![警告(单次使用寿命)] fn do_foo(){ #[导出(调试)] 结构Foo{ | ^^ |,rust,Rust,这个警告是什么意思?如何解决 省略派生或函数时不会显示此警告。其目的是防止出现这样的代码,因为在这种情况下,生命周期没有意义明确指定: #![warn(single_use_lifetimes)] fn do_foo() { #[derive(Debug)] struct Foo<'a> { bar: &'a u32, } } 如果你把它剪下来,你会得到: pub fn example(_val: SomeType<'_>

这个警告是什么意思?如何解决


省略派生或函数时不会显示此警告。

其目的是防止出现这样的代码,因为在这种情况下,生命周期没有意义明确指定:

#![warn(single_use_lifetimes)]

fn do_foo() {
    #[derive(Debug)]
    struct Foo<'a> {
        bar: &'a u32,
    }
}
如果你把它剪下来,你会得到:

pub fn example(_val: SomeType<'_>) {}
使用std::fmt;
结构Foo{
fn fmt(&self,_f:&mut fmt::Formatter)->fmt::Result{Ok(())}
}
警告:生存期参数“%a”仅使用一次
-->src/lib.rs:9:6
|
9 | impl{
|      ^^
|

也就是说,
看起来非常简单:它警告您,生命周期在结构中只使用一次。是的,但是如何解决这个问题?(不删除
#![warn(…)]
)@trentcl在这种情况下警告的目的是什么?lint应该是用来建议何时可以使用未命名的
'
生命周期,但这里似乎不是这样。@Peter给出了公认的答案,这看起来像一个bug,但起初我认为它在这种情况下可能没有目的,在这种情况下案例“只需关闭它”将是正确的答案。存在许多不应该一直打开的警告不应该
#[自动派生]
禁止此类警告?看起来像是一个应该报告的错误。@TimDiekmann我想这就是我刚才添加的链接,但可能lint名称随着时间的推移已经改变了?
pub fn example(_val: SomeType<'_>) {}
use std::fmt;

struct Foo<'a> {
    bar: &'a u32,
}

impl<'a> fmt::Debug for Foo<'a> {
    fn fmt(&self, _f: &mut fmt::Formatter) -> fmt::Result { Ok(()) }
}