gpt4 book ai didi

rust - 不能借用 `*request` 作为可变的,因为它也被借用为不可变的

转载 作者:行者123 更新时间:2023-11-29 08:14:34 24 4
gpt4 key购买 nike

我使用 nickel.rs 在 Rust 中编写了一个端点:

{
let client = client.clone();
let mongodb = MongoRepository::new(client, "rust-users".into());
router.put("/users/:id",middleware!(|request, mut response| {

let id = try_with!(response, {
request.param("id")
.ok_or((StatusCode::BadRequest, "Id parameter required"))
});
let user = try_with!(response, {
request.json_as::<User>()
.map_err(|e|
(StatusCode::BadRequest, format!("{}",e))
)
});
let update_id = try_with!(response, {
mongodb.update_by_id("users", id, user)
.map_err(|e|
(StatusCode::InternalServerError, e)
)
});
ApiResult::Ok(StatusCode::Ok, update_id.to_json())

}));
}

在这一行中:

let id = try_with!(response, { 
request.param("id")
.ok_or((StatusCode::BadRequest, "Id parameter required"))
});

request 是在不可变状态下借用的,但是在这一行中:

let user = try_with!(response, {
request.json_as::<User>()
.map_err(|e|
(StatusCode::BadRequest, format!("{}",e))
)
});

请求以可变状态被借用。这会导致以下错误:

error: cannot borrow `*request` as mutable because it is also borrowed
as immutable

我试图通过将 id 行包装在一个单独的范围内来修复此错误,但问题仍然存在。

我不确定还有什么方法可以解决这个问题。代码还有什么问题吗?

最佳答案

id&str 类型。这是指向变量 request 的指针。调用 json_as 将对变量 request 的可变引用作为参数。这导致错误“不能将 *request 借用为可变的,因为它也被借用为不可变的”。

有很多方法可以解决这个问题;可能最直接的方法是使用 to_owned()&str 转换为 String

关于rust - 不能借用 `*request` 作为可变的,因为它也被借用为不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899908/

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