英文:
Why do I need to dereference hyper's Response before setting a body?
问题
在这里为您翻译代码部分:
let mut res = Response::new(Body::empty());
*res.body_mut() = Body::from("Ok, now...");
为什么在这里需要解引用呢?在这个上下文中,res
看起来不像一个指针,那么为什么 res.body_mut() = Body::from("Ok, now...");
会引发以下错误?
error[E0070]: invalid left-hand side of assignment
--> src\main.rs:8:20
|
8 | res.body_mut() = Body::from("Ok, now...");
| -------------- ^
| |
| cannot assign to this expression
|
help: consider dereferencing here to assign to the mutably borrowed value
|
8 | *res.body_mut() = Body::from("Ok, now...");
|
(注意:这只是代码的翻译,不包含其他内容。)
英文:
I'm getting started with Hyper (and Rust, in general) by following their guide. I noticed that before setting a body on the Response
, I need to dereference it like this:
let mut res = Response::new(Body::empty());
*res.body_mut() = Body::from("Ok, now...");
Why is the dereferencing necessary here? res
doesn't look like a pointer in this context, so why does res.body_mut() = Body::from("Ok, now...")
throw the following error?
error[E0070]: invalid left-hand side of assignment
--> src\main.rs:8:20
|
8 | res.body_mut() = Body::from("Ok, now...");
| -------------- ^
| |
| cannot assign to this expression
|
help: consider dereferencing here to assign to the mutably borrowed value
|
8 | *res.body_mut() = Body::from("Ok, now...");
|
答案1
得分: 4
为什么在这里需要解引用?在这个上下文中,res 看起来不像一个指针,所以为什么 res.body_mut() = Body::from("Ok, now...") 会抛出以下错误?
并不是 res
是一个指针,而是 res.body_mut()
是一个指针:
pub fn body_mut(&mut self) -> &mut T
你需要解引用 &mut T
以替换指针指向的内容,否则你尝试将值分配给 res.body_mut()
本身,这... 没有太多意义。
Rust 的解引用运算符的优先级低于方法调用,因此方法调用首先执行。
英文:
> Why is the dereferencing necessary here? res doesn't look like a pointer in this context, so why does res.body_mut() = Body::from("Ok, now...") throw the following error?
It's not res
which is a pointer, it's res.body_mut()
:
pub fn body_mut(&mut self) -> &mut T
you need to dereference the &mut T
in order to replace the pointee, otherwise you try to assign to res.body_mut()
itself which... doesn't make much sense.
Rust's dereference operator has a lower precedence than method calls, so the method call applies first.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论