Skip to content
On this page

Rust结构体


标签:rust/basic  

✍读书笔记:『Rusts程序设计语言』ch05 - 01

Rust 结构体

Rust 的结构体本身没什么好讲的,和其他语言差不多,但注意几个点:

一,如果字段包含可变长属性(比如String)那么整个结构体需要遵守String的原则,例如=操作是移动操作。如果字段都是基础变量,那么就是拷贝操作。

二,String 这种可变长属性如果被修改后成其他值的时候,原先的值就没有了所有者,将被丢弃。从效果上来看,就和一般基础类型变量一样了。不需要像 C 一样手动释放。

三,语法糖:可以利用同作用域内和字段名相同的变量快捷赋值(类似ES6的语法):

rust
fn build_user(email: String, username: String) -> User {
    User {
        active: true,
        username,
        email,
        sign_in_count: 1,
    }
}

四,语法糖:不同结构体变量如果有部分相同字段,可以快捷拷贝:

rust
let user2 = User {
  email: String::from("[email protected]"),
  ..user1
};

Rust 元组结构体

元组结构体(tuple structs),不需要字段名,看起来像元组。

rust
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
}

Rust 单元结构体

没有定义任何字段的结构体,目前不知道作用。

rust
struct AlwaysEqual;
fn main() {
    let subject = AlwaysEqual;
}

Last updated: