Rust学习笔记

31、The Drop trait

31、The Drop trait

The Drop trait 在学析构函数的时候,提到了drop函数: 回收类型占用的内存(即std::mem::size_of bytes) 清理值可能正在管理的任何其他资源(比如String的堆缓冲区) 第二点是Drop trait的用武之地 pub trait Drop { fn

CN059 CN059 2025-09-15
67 0 0
30、Copy trait

30、Copy trait

复制值(第二部分) 与上一节的例子一样,但是有点不同,使用u32而不是String作为类型。 fn consumer(s: u32) { /* */ } fn example() { let s: u32 = 5; consumer(s); let t = s + 1

CN059 CN059 2025-09-15
36 0 0
29、Clone trait

29、Clone trait

复制值(第一部分) 上一章我们学到了所有权和借用。 特别指出了: Rust中每个值在任何给定的时间都有一个调用者。 当函数获取到一个值的所有权时(它消耗了它),函数的调用者就不能再使用这个值了。 这些限制可能有一些局限性。有时候,我们可能需要调用一个获取某个值所有权的函数,但是之后我们可能还需

CN059 CN059 2025-09-15
36 0 0
28、泛型和关联类型

28、泛型和关联类型

泛型和关联类型 首先重新复习一下之前学到的两个关于trait的定义,From和Deref pub trait From<T> { fn from(value: T) -> Self; } pub trait Deref { type Target;

CN059 CN059 2025-09-15
32 0 0
27、From和Into

27、From和Into

From and Into 让我们回到字符串之旅的起点! let ticket = Ticket::new( "A title".into(), "A description".into(), "To-Do".i

CN059 CN059 2025-09-10
92 0 0
26、Sized trait

26、Sized trait

Sized trait 事实上,&str 远比表面上看起来更复杂,即使我们已经深入探讨过 Deref 强制转换机制之后也是如此。 根据我们之前对内存布局的讨论,人们可能会合理地预期 &str 在栈上应当只以一个 usize(即指针)的形式存在。然而实际上并非如此。&str 除

CN059 CN059 2025-09-10
55 0 0
25、Deref trait(解引用trait)

25、Deref trait(解引用trait)

Deref trait(解引用trait) 上一节的练习很简单,我就没写 把代码: impl Ticket { pub fn title(&self) -> &String { &self.title } } 修改为: impl Tic

CN059 CN059 2025-09-10
56 1 0
24、String slices(字符串切片)

24、String slices(字符串切片)

String slices(字符串切片) 在前面几个章节的代码中,我们用到了很多的字符串字面量。他们后面总是调用.to_string()或into()。现在深入研究一下原因。 字符串字面量 我们可以通过将原始文本括在双引号里面来定义字符串文字: let s = "Hello, world!

CN059 CN059 2025-09-10
45 0 0
23、Trait Bounds(Traits约束)

23、Trait Bounds(Traits约束)

Trait Bounds(Traits约束) 我们已经看到了两种traits的用例: 解锁“内置”行为(例如:运算符重载) 为已经存在的类型添加新的行为(例如:为u32类型添加is_even方法) 现在是第三种用例:泛型编程 引入问题 到目前为止,我们的所有函数和方法都是和具体类型一起工作的。

CN059 CN059 2025-09-10
52 0 0
22、Derive macros(派生宏)

22、Derive macros(派生宏)

Derive macros(派生宏) 上一节,我们为Ticket结构体实现了PartialEq这个trait,使其可以使用比较运算符(==、!=),但是,如果我们想要为大量的结构体实现这个比较基础的trait,那么我们可能要手动写大量的代码,可能重复性很高,导致代码又臭又长。 为了解决这个问题,Ru

CN059 CN059 2025-09-09
44 0 0
1 4 5 6 7 8 9