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/

相关文章:

objective-c - 指向结构 C/ObjC 中的指针的指针

c# struct/class initilaze 一个 Arraylist

pointers - 为什么 Rust 认为泄漏内存是安全的?

rust - 对零大小类型的引用之间的生命周期差异

c - fgets在函数内部使用结构指针崩溃

C - 通过引用传递结构

c - 结构标签和花括号后面的标签有什么区别?

rust - 向结构体添加新的成员变量

multithreading - 不需要时强制使用 Mutex

rust - 线程上对象的借用和所有权