扫码阅读
手机扫码阅读

Rust学习笔记(5)- 定义和实例化

477 2023-07-19

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Rust学习笔记(5)- 定义和实例化
文章来源:
TestOps
扫码关注公众号
Structs in Rust - Summary

定义和实例化

在Rust中,结构体(struct)用于组织相关联的值,每个值通过命名提高可读性。结构体定义和实例化的语法类似于Go语言。例如:

    struct User {
        active: bool,
        username: String,
        email: String,
        sign_in_count: u64,
    }
    

实例化结构体时,可以直接赋值给其字段:

    let user1 = User {
        email: String::from("someone@example.com"),
        username: String::from("someusername123"),
        active: true,
        sign_in_count: 1,
    };
    

简易形式的结构体赋值

字段名与参数名相同的情况下,可以简写:

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

用一个struct给另一个struct赋值

可以使用结构体更新语法来复用其他实例的字段值:

    let user2 = User {
        email: String::from("another@example.com"),
        ..user1
    };
    

这种语法允许快速地创建一个新的struct实例,复用部分旧的值,但要注意字段的所有权问题。

tuple struct结构体

Rust也支持tuple struct,它们看起来像是命名的元组:

    struct Color(i32, i32, i32);
    struct Point(i32, i32, i32);
    

尽管两个tuple struct可能有相同的字段值,它们被视为不同的类型。

空结构体

空结构体不包含任何字段:

    struct AlwaysEqual;
    

关于struct的ownership

通常结构体不包含引用,除非使用生命周期(lifetime)标注。不正确地使用引用会导致编译错误,例如:

    struct User {
        active: bool,
        username: &str, // 错误:缺少生命周期标注
        email: &str,    // 错误:缺少生命周期标注
        sign_in_count: u64,
    }
    

想要了解更多内容?

查看原文:Rust学习笔记(5)- 定义和实例化
文章来源:
TestOps
扫码关注公众号