2.8.4 进一步深入特征 深入了解特征 1. 关联类型 在方法一章中,我们讲到了关联函数,但是实际上关联类型和关联函数并没有任何交集,虽然它们的名字有一半的交集。 关联类型是在特征定义的语句块中,申明一个自定义类型,这样就可以在特征的方法签名中使用该类型: 123456789pub trait Iterator { // type Item;:这是一个关联类型(associated type), 2025-01-05 rust > rust圣经 > rust基础 #rust
2.8.3 特征对象 特征对象 在上一节中有一段代码无法通过编译: 1234567891011fn returns_summarizable(switch: bool) -> impl Summary { if switch { Post { // ... } } else { 2025-01-05 rust > rust圣经 > rust基础 #rust
2.8.2 特征 Trait 特征 Trait 特征定义了一组可以被共享的行为,只要实现了特征,你就能使用这组行为。 1. 定义特征 如果不同的类型具有相同的行为,那么我们就可以定义一个特征,然后为这些类型实现该特征。定义特征是把一些方法组合在一起,目的是定义一个实现某些目标所必需的行为的集合。 例如,我们现在有文章 Post 和微博 Weibo 两种内容载体,而我们想对相应的内容进行总结,也就是无论是文章内容,还是 2025-01-05 rust > rust圣经 > rust基础 #rust
2.8.1 泛型 Generics 泛型 Generics 实际上,泛型就是一种多态。泛型主要目的是为程序员提供编程的便利,减少代码的臃肿,同时可以极大地丰富语言本身的表达能力,为程序员提供了一个合适的炮管。 123456789fn add<T>(a:T, b:T) -> T { a + b}fn main() { println!("add i8: 2025-01-05 rust > rust圣经 > rust基础 #rust
2.7 方法 方法 Method 在 Rust 中,方法和对象成对出现: 1object.method() 例如读取一个文件写入缓冲区,如果用函数的写法 read(f, buffer),用方法的写法 f.read(buffer)。不过与其它语言 class 跟方法的联动使用不同(这里可能要修改下),Rust 的方法往往跟结构体、枚举、特征(Trait)一起使用,特征将在后面几章进行介绍。 1. 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.4 全模式列表 全模式列表 1. 匹配字面值 12345678let x = 1;match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), _ => println!("anything 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.3 模式适用场景 模式适用场景 1. 模式 模式是 Rust 中的特殊语法,它用来匹配类型中的结构和数据,它往往和 match 表达式联用,以实现强大的模式匹配能力。模式一般由以下内容组合而成: 字面值 解构的数组、枚举、结构体或者元组 变量 通配符 占位符 2. 所有可能用到模式的地方 2.1 match 分支 12345match VALUE { PATTERN 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.2 解构 Option 解构 Option 在枚举那章,提到过 Option 枚举,它用来解决 Rust 中变量是否有值的问题,定义如下: 1234enum Option<T> { None, Some(T),} 简单解释就是:一个变量要么有值:Some(T), 要么为空:None。 那么现在的问题就是该如何去使用这个 Option 枚举类型,根据我们上一节的经验 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.1 match和 if let match 和 if let 在 Rust 中,模式匹配最常用的就是 match 和 if let。 先来看一个关于 match 的简单例子: 1234567891011121314151617enum Direction { East, West, North, South,}fn main() { let dire = Dir 2025-01-05 rust > rust圣经 > rust基础 #rust