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 toi32
短,因为它包含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 }));
}