Rust 程序设计(第 2 版)
Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
软件工程师
1469 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
课程目录
已完结/共 41 讲
时长 02:41
时长 06:30
时长 10:04
时长 01:05
时长 50:06
时长 31:35
时长 34:39
时长 29:11
时长 37:15
时长 23:44
时长 44:19
时长 29:54
时长 39:01
时长 01:38
时长 01:15
时长 00:37
Rust 程序设计(第 2 版)
15
15
1.0x
00:00/00:00
登录|注册

第 9 章 结构体

很久以前,当牧羊人想要了解两个羊群是否相似时,会挨个对它们进行比对。
——John C. Baez,James Dolan,“Categorification”
Rust 中的结构体(struct/structure)类似于 C 和 C++ 中的 struct 类型、Python 中的类和 JavaScript 中的对象。结构体会将多个不同类型的值组合成一个单一的值,以便你能把它们作为一个单元来处理。给定一个结构体,你可以读取和修改它的各个组件。结构体也可以具有关联的方法,以对其组件进行操作。
Rust 有 3 种结构体类型:具名字段型结构体元组型结构体单元型结构体。这 3 种结构体在引用组件的方式上有所不同:具名字段型结构体会为每个组件命名;元组型结构体会按组件出现的顺序标识它们;单元型结构体则根本没有组件。单元型结构体虽然不常见,但它们比你想象的更有用。
本章将详细解释每种类型并展示它们在内存中的样子;介绍如何向它们添加方法、如何定义适用于不同组件类型的泛型结构体类型,以及如何让 Rust 为你的结构体生成常见的便捷特型的实现。

9.1 具名字段型结构体

具名字段型结构体的定义如下所示:
/// 由8位灰度像素组成的矩形
struct GrayscaleMap {
pixels: Vec<u8>,
size: (usize, usize)
}
它声明了一个 GrayscaleMap 类型,其中包含两个给定类型的字段,分别名为 pixelssize。Rust 中的约定是,所有类型(包括结构体)的名称都将每个单词的第一个字母大写(如 GrayscaleMap),这称为大驼峰格式(CamelCase 或 PascalCase)。字段和方法是小写的,单词之间用下划线分隔,这称为蛇形格式(snake_case)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Rust 中的结构体(struct/structure)类似于 C 和 C++ 中的 struct 类型、Python 中的类和 JavaScript 中的对象。结构体将多个不同类型的值组合成一个单一的值,以便你能把它们作为一个单元来处理。Rust 有 3 种结构体类型:具名字段型结构体、元组型结构体和单元型结构体。具名字段型结构体会为每个组件命名;元组型结构体会按组件出现的顺序标识它们;单元型结构体则根本没有组件。本章详细解释了每种类型的定义和使用方法,介绍了结构体表达式的构造和访问,以及如何创建具名字段结构体的值。同时,还介绍了元组型结构体的定义和使用方法,以及与具名字段型结构体的比较。 元组型结构体适用于创造新类型(newtype),即建立一个只包含单组件的结构体,以获得更严格的类型检查。单元型结构体声明了一个根本没有元素的结构体类型,它的值不占用内存,类似于单元类型 `()`。在内存中,具名字段型结构体和元组型结构体是一样的:值的集合以特定方式在内存中布局。Rust 方法不会像 C++ 或 Java 中的方法那样出现在结构体定义中,而是会出现在单独的 `impl` 块中。 文章还介绍了方法的 `self` 参数,包括通过值或引用获取 `self`,以及通过智能指针类型传递 `self`。此外,还介绍了类型关联函数和关联常量的概念,以及泛型结构体的定义和使用方法。通过这些内容,读者可以深入了解 Rust 中结构体的高级特性和灵活性,以及如何利用这些特性来提高代码的可读性和可维护性。 另外,文章还介绍了带生命周期参数和常量参数的泛型结构体,展示了如何在 Rust 中使用这些特性来创建更加灵活和高效的数据结构。这些内容为读者提供了更深入的了解,帮助他们在实际开发中更好地应用 Rust 的特性和优势。文章还介绍了让结构体类型派生自某些公共特型的方法,以及内部可变性的概念,为读者提供了更全面的 Rust 结构体知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部