Rust “类型参数”的生存期;参数类型的寿命可能不够长”;

Rust “类型参数”的生存期;参数类型的寿命可能不够长”;,rust,lifetime,Rust,Lifetime,我有这样的代码(这就是#[async\u trait]的扩展方式): 但这不起作用: error[E0309]:参数类型'Fut'可能寿命不够长 | 16 |针对F的impl BoolTrait 帮助---考虑添加一个显式的生命周期绑定…… ... 21 |框::pin(自身(值)) |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^……以便类型“Fut”将满足其所需的生存期界限 好的,让我们尝试一下静态的生命周期,只是为了使它能够编译(实际上我认为我的问题在这里,但我不知道应该使

我有这样的代码(这就是
#[async\u trait]
的扩展方式):

但这不起作用:

error[E0309]:参数类型'Fut'可能寿命不够长
|
16 |针对F的impl BoolTrait
帮助---考虑添加一个显式的生命周期绑定……
...
21 |框::pin(自身(值))
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^……以便类型“Fut”将满足其所需的生存期界限
好的,让我们尝试一下静态的生命周期,只是为了使它能够编译(实际上我认为我的问题在这里,但我不知道应该使用什么正确的生命周期):

这就是我所在的地方。实际上,我可以通过将
value:&i32
param替换为
value:i32
,来修复它,但这不是我想要的,我想要使用完全相同的引用

如果我正确理解了错误,编译器会说Future lives比ref to
i32
短,因为它包含ref to it,但在trait impl I set
的static

在我看来,我需要以某种方式指定
Fut
的生存期必须短于
impl
中的
&i32

trait BoolTrait {
    fn check<'s: 'f, 'v: 'f, 'f>(&'s self, value: &'v i32) -> Pin<Box<dyn Future<Output = bool> + 'f>>;
}
impl<F, Fut> BoolTrait for F
    where
        F: Fn(&i32) -> Fut,
        Fut: Future<Output = bool> {
    fn check<'s: 'f, 'v: 'f, 'f>(&'s self, value: &'v i32) -> Pin<Box<dyn Future<Output=bool> + 'f>> {
        Box::pin(self(value))
    }
}
Fut: Future<Output = bool> + 'static
async fn test<BT: BoolTrait>(bt: BT) {
    let v = 42;
    bt.check(&v).await;
}

fn main() {
    block_on(test(|v: &i32| async { *v == 42 }));
}