struct - 如何创建嵌套结构?

标签 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`

最佳答案

嵌套结构并没有什么神奇之处。您使用与非嵌套结构完全相同的语法:

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 以避免警告。

关于struct - 如何创建嵌套结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48550453/

相关文章:

rust - 在 Rust nightly 中使用关联的 const 和 const 泛型时类型不匹配

rust - 带有使用rust 的exec “tail -f xxx”

sockets - 为什么在从 Unix 套接字读取时使用 netcat 发送 ^D 不会触发 EOF?

c - 如何计算结构的大小?

c - 使用宏初始化结构

rust - 访问由互斥锁锁定的结构中的两个向量

enums - 当枚举变体已知时解包内部类型

C 错误, "expected declaration specifier"

c - 如何通过指向结构中的松弛字节来访问另一个变量的数据?

c - 二维数组结构出现段错误