我实现了一个嵌套结构调用的方法。 我读到了Rust生命周期,我认为我的问题是关于生命周期,但我无法理解如何在代码中使用它。
#[derive(Debug)]
pub struct Request {
Header: String
}
#[derive(Debug)]
pub enum Proto {
HTTP,
HTTPS
}
#[derive(Debug)]
pub struct HTTP {
ssss: Request,
names: Proto,
}
impl HTTP {
pub fn new(name: Proto) -> HTTP {
HTTP{
ssss.Header: "Herman".to_string(),
names: name,
}
}
}
无法为ssss.Header
分配值:
error: expected one of `,` or `}`, found `.`
--> src/main.rs:20:17
|
20 | ssss.Header: "Herman".to_string(),
| ^ expected one of `,` or `}` here
error[E0425]: cannot find value `ssss` in this scope
--> src/main.rs:20:13
|
20 | ssss.Header: "Herman".to_string(),
| ^^^^
| |
| `self` value is only available in methods with `self` parameter
| help: try: `self.ssss`
error[E0063]: missing field `names` in initializer of `HTTP`
--> src/main.rs:19:9
|
19 | HTTP{
| ^^^^ missing `names`
答案 0 :(得分:3)
嵌套结构没什么神奇之处。您使用与非嵌套结构完全相同的语法:
pub fn new(name: Proto) -> HTTP {
HTTP {
ssss: Request {
header: "Herman".to_string(),
},
names: name,
}
}
如果您发现嵌套过于复杂,您可以随时引入一个中间变量:
pub fn new(names: Proto) -> HTTP {
let ssss = Request {
header: "Herman".to_string(),
};
HTTP { ssss, names }
}
注意:惯用Rust使用snake_case
作为变量,方法和结构属性等标识符。我已将您的Header
重命名为header
,以避免出现警告。