如何创建嵌套结构?

时间:2018-01-31 19:57:18

标签: struct rust

我实现了一个嵌套结构调用的方法。 我读到了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`

1 个答案:

答案 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,以避免出现警告。