作者:CN059

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
Github项目协作规范(自用)

Github项目协作规范(自用)

Github项目协作规范(自用) 本篇文章比较基础,或有某些地方表述不严谨,作者水平有限,如有错误,请联系作者修改,万分感谢! 一、准备工作 使用Github进行项目协同开发,首先我们要先学会使用Github和Git。 可以去网上搜各种资料参考,比如关于 GitHub 和 Git - GitHub

CN059 CN059 2025-09-11
146 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
21、Operator overloading(运算符重载)

21、Operator overloading(运算符重载)

运算符重载 现在我们对于traits有了基本的了解,回到运算符重载上来。运算符重载就是对一些运算符(比如+,-,*,/,==,!=等)的行为进行自定义。 运算符是traits 在Rust里,运算符就是traits。 对于每一个运算符,都有相应的trait来定义这个运算符的行为。通过对我们自己的类型实

CN059 CN059 2025-09-09
34 0 0
1 5 6 7 8 9 11