gpt4 book ai didi

rust - 借入的值(value)使用期限不足,由于在封包E0597中的使用而移动

转载 作者:行者123 更新时间:2023-12-03 11:49:23 25 4
gpt4 key购买 nike

我正在Actix-Web上迈出第一步。但是这种关闭导致我出错

#[derive(Deserialize, Serialize, Debug, Copy, Clone)]
pub struct PaginationQuery {
pub limit: Option<u32>,
pub offset: Option<u32>,
}

pub fn get_all_trainings_2(
query: web::Query<PaginationQuery>,
pool: web::Data<Pool>,
) -> impl Future<Item = HttpResponse, Error = Error> {
let mut pagination = query.0;

// Thread Blocking
web::block(move || database::get_exercises(pool, pagination)).then(|res| {
match res {
Ok((trainings_list, total)) => {
// let mut list: Vec<TrainingsResponse> = Vec::new();

let list: Vec<TrainingsResponse> = trainings_list
.into_iter()
.map(|tr| TrainingsResponse::from(tr))
.collect();

Ok(HttpResponse::Ok().json(ListResult {
offset: pagination.offset.unwrap_or(0),
total: total as u32,
items: list,
}))
}
Err(_) => Ok(HttpResponse::InternalServerError().into()),
}
})
}

错误:

error[E0597]: `pagination` does not live long enough
--> src\handler.rs:66:29
|
51 | ) -> impl Future<Item = HttpResponse, Error = Error> {
| ----------------------------------------------- opaque type requires that `pagination` is borrowed for `'static`
...
55 | web::block(move || database::get_exercises(pool, pagination)).then(|res| {
| ----- value captured here
...
66 | offset: pagination.offset.unwrap_or(0),
| ^^^^^^^^^^ borrowed value does not live long enough
...
74 | }
| - `pagination` dropped here while still borrowed

我不明白为什么我不能第二次使用分页值。这里有什么问题?

最佳答案

pagination的第一次使用是有效的,因为您将其移动了,而第二次使用也可以通过移动它来解决:

web::block(move || database::get_exercises(pool, pagination)).then(move |res| { … })
// ^^^^ ^^^^

由于您返回的是 Future,因此它不能借用局部变量,因为它的生命周期更长。

您可以将 pagination移动两次,因为 PaginationQueryCopy

关于rust - 借入的值(value)使用期限不足,由于在封包E0597中的使用而移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com