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
登录|注册

第 11 章 特型与泛型(2)

11.4 定义类型之间关系的特型

迄今为止,我们看到的每个特型都是独立的:特型是类型可以实现的一组方法。特型也可以用于多种类型必须协同工作的场景中。它们可以描述多个类型之间的关系。
std::iter::Iterator 特型会为每个迭代器类型与其生成的值的类型建立联系。
std::ops::Mul 特型与可以相乘的类型有关。在表达式 a * b 中,值 ab 可以是相同类型,也可以是不同类型。
rand crate 中包含随机数生成器的特型(rand::Rng)和可被随机生成的类型的特型(rand::Distribution)。这些特型本身就准确地定义了它们是如何协同工作的。
你不需要每天都创建这样的特型,但它们在整个标准库和第三方 crate 中随处可见。本节将展示每一个示例是如何实现的,并根据需要来展开讲解相关的 Rust 语言特性。你需要掌握的关键技能是能够阅读这些特型和方法签名,并理解它们对所涉及的类型意味着什么。

11.4.1 关联类型(或迭代器的工作原理)

接下来我们从迭代器讲起。迄今为止,每种面向对象的语言都内置了某种对迭代器的支持,迭代器是用以遍历某种值序列的对象。
Rust 有一个标准的 Iterator 特型,定义如下:
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
...
}
这个特型的第一个特性(type Item;)是一个关联类型。实现了 Iterator 的每种类型都必须指定它所生成的条目的类型。
第二个特性(next() 方法)在其返回值中使用了关联类型。next() 会返回一个 Option<Self::Item>:或者是序列中的下一个值 Some(item),或者当没有更多值可供访问时返回 None。该类型要写成 Self::Item,而不仅仅是无修饰的 Item,因为这里的 Item 是每个迭代器类型下的一个特性,而不是一个独立的类型。同样,selfSelf 类型在代码中任何使用了其字段、方法等的地方都要像这样显式写出来。
下面是为一个类型实现 Iterator 的范例:
//(来自标准库中std::env模块的代码)
impl Iterator for Args {
type Item = String;
fn next(&mut self) -> Option<String> {
...
}
...
}
std::env::Args 是我们在第 2 章中用来访问命令行参数的标准库函数 std::env::args() 返回的迭代器类型。它能生成 String 值,因此这个 impl 声明了 type Item = String;
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Rust中的特型与泛型是编程中重要的概念。特型描述了类型之间的关系,如迭代器特型描述了迭代器类型与其生成的值类型之间的关系。而泛型是一种通用的编程方式,适用于多种类型。本文重点介绍了关联类型的概念,以及如何在泛型代码中使用关联类型。此外,还介绍了泛型特型的概念,以及如何在Rust中实现运算符重载。通过具体的代码示例,读者可以了解如何在Rust中使用特型和泛型来描述类型之间的关系,以及如何在实际编程中应用它们。另外,文章还介绍了Rust中的impl Trait特性,以及关联常量的使用。这些概念和技术对于理解Rust语言的特性和进行高效的编程非常重要。在接下来的章节中,将进一步讨论在Rust代码中使用特型和泛型的多种方式,以及它们在闭包、迭代器、输入/输出和并发等主题中的核心角色。

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

精选留言

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