不能将 `*request` 借用为可变的,因为它也被借用为不可变的
cannot borrow `*request` as mutable because it is also borrowed as immutable
我使用 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
的可变引用作为参数。这会导致错误 "cannot borrow *request
as mutable because it is also borrowed as immutable".
有多种方法可以解决这个问题;可能最直接的是使用 to_owned()
将 &str
转换为 String
.
我使用 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
的可变引用作为参数。这会导致错误 "cannot borrow *request
as mutable because it is also borrowed as immutable".
有多种方法可以解决这个问题;可能最直接的是使用 to_owned()
将 &str
转换为 String
.