Rust 中的结构体(Struct)与元组(Tuple)都可以将若干个类型不一定相同的数据捆绑在一起形成整体,

但结构体的每个成员和其本身都有一个名字,这样访问它成员的时候就不用记住下标了。

元组常用于非定义的多值传递,而结构体用于规范常用的数据结构。

结构体的每个成员叫做"字段"。

struct Site {
    domain: String,
    name: String,
    nation: String,
    found: u32
}

注意:如果你常用 C/C++,请记住在 Rust 里 struct 语句仅用来定义,不能声明实例,结尾不需要 ; 符号,而且每个字段定义之后用 , 分隔

Rust 很多地方受 JavaScript 影响,在实例化结构体的时候用 JSON 对象的 key: value 语法来实现定义

结构体类名 {
    字段名 : 字段值,
    ...
}

如果正在实例化的结构体有字段名称和现存变量名称一样的,可以简化书写:

let domain = String::from("www.runoob.com");
let name = String::from("RUNOOB");
let runoob = Site {
    domain,  // 等同于 domain : domain,
    name,    // 等同于 name : name,
    nation: String::from("China"),
    traffic: 2013
};

结构体更新语法:

let site = Site {
    domain: String::from("www.runoob.com"),
    name: String::from("RUNOOB"),
    ..runoob
};

注意:..runoob 后面不可以有逗号。这种语法不允许一成不变的复制另一个结构体实例,意思就是说至少重新设定一个字段的值才能引用其他实例的值。

元组结构体

有一种更简单的定义和使用结构体的方式:元组结构体