标签:Rust

62、IndexMut trait(可变索引trait)

62、IndexMut trait(可变索引trait)

Mutable indexing   Index允许只读访问。它不允许我们更改检索到的值。   IndexMut   如果我们想要支持可变性,那我们就需要实现IndexMut trait。 // Slightly simplified // 略微简化 pub trait

CN059 CN059 2025-09-25
47 0 0
61、Index trait(索引trait)

61、Index trait(索引trait)

Indexing   上一节的练习中,Ticket::store根据给定的TicketId返回Option<&Ticket>。 我们之前已经学过了如何使用Rust的索引语法访问数组和vector的元素。 let v = vec![0, 1, 2]; assert_eq!

CN059 CN059 2025-09-25
40 0 0
60、两个状态(开发思维)

60、两个状态(开发思维)

Ticket ID   让我们再想想我们的票务管理系统。 我们现在的Ticket模型如下: pub struct Ticket { pub title: TicketTitle, pub description: TicketDescription, pub sta

CN059 CN059 2025-09-25
43 1 0
59、Mutable slices(可变切片)

59、Mutable slices(可变切片)

Mutable slices(可变切片)   每当我们谈论切片类型(如str和[T])时,我们使用的都是他们的不可变借用形式(&str和&[T])。 但是切片也可以是可变的。   这是关于如何创建可变切片的例子: let mut numbers = vec![1,

CN059 CN059 2025-09-25
41 0 0
58、Slices(切片)

58、Slices(切片)

Slices(切片)   让我们回顾一下Vec的内存布局: let mut numbers = Vec::with_capacity(3); numbers.push(1); numbers.push(2);   我们之前学到了String本质上其实就是Vec<u8&g

CN059 CN059 2025-09-25
37 0 0
57、impl Trait第二节

57、impl Trait第二节

在参数位置的impl Trait   在前面的练习中,我们看到了如何使用impl Trait在不指定类型名的情况下返回类型。 相同的语法其实也可以用在参数的位置: fn print_iter(iter: impl Iterator<Item = i32>) { for

CN059 CN059 2025-09-25
35 0 0
56、impl Trait

56、impl Trait

impl Trait   上一节的Ticket::to_dos方法返回Vec<&ticket>。 每次调用该函数签名的时候,该签名都会引入新的堆内存分配,这可能是不必要的,这取决于调用者需要对结果做什么。如果返回迭代器而不是Vec,to_dos会更好,从而使调用者能够决

CN059 CN059 2025-09-25
33 0 0
55、组合器

55、组合器

Combinators(组合器)   迭代器可以做的不仅仅是for循环。 如果我们查看Iteratortrait的文档,我们可以发现大量方法可以用来以各种方式转换、过滤和组合迭代器。   这里我们可以先了解一下最常见的一些组合器: map可以将函数应用于迭代器的每个元素。 fi

CN059 CN059 2025-09-25
30 0 0
54、生命周期

54、生命周期

Lifetimes(生命周期)   让我们尝试通过为&TicketStore添加一个IntoIterator的实现来完成前面的练习,以最大程度地方便使用for循环。   让我们从填写实现中最“明显”的部分开始: impl IntoIterator for &Tic

CN059 CN059 2025-09-23
42 0 0
53、Iter

53、Iter

.iter()   IntoIterator消耗self来创建一个迭代器。   这有它的好处:我们可以从迭代器中获取拥有权的值。例如:如果我们在Vec<Ticket>上调用.into_iter(),我们将会后的返回Ticket的迭代器。   这也是它的缺点:

CN059 CN059 2025-09-23
39 0 0
1 2 3 4 5 9