复制值(第一部分) 上一章我们学到了所有权和借用。 特别指出了: Rust中每个值在任何给定的时间都有一个调用者。 当函数获取到一个值的所有权时(它消耗了它),函数的调用者就不能再使用这个值了。 这些限制可能有一些局限性。有时候,我们可能需要调用一个获取某个值所有权的函数,但是之后我们可能还需
泛型和关联类型 首先重新复习一下之前学到的两个关于trait的定义,From和Deref pub trait From<T> { fn from(value: T) -> Self; } pub trait Deref { type Target;
Github项目协作规范(自用) 本篇文章比较基础,或有某些地方表述不严谨,作者水平有限,如有错误,请联系作者修改,万分感谢! 一、准备工作 使用Github进行项目协同开发,首先我们要先学会使用Github和Git。 可以去网上搜各种资料参考,比如关于 GitHub 和 Git - GitHub
From and Into 让我们回到字符串之旅的起点! let ticket = Ticket::new( "A title".into(), "A description".into(), "To-Do".i
Sized trait 事实上,&str 远比表面上看起来更复杂,即使我们已经深入探讨过 Deref 强制转换机制之后也是如此。 根据我们之前对内存布局的讨论,人们可能会合理地预期 &str 在栈上应当只以一个 usize(即指针)的形式存在。然而实际上并非如此。&str 除
Deref trait(解引用trait) 上一节的练习很简单,我就没写 把代码: impl Ticket { pub fn title(&self) -> &String { &self.title } } 修改为: impl Tic
String slices(字符串切片) 在前面几个章节的代码中,我们用到了很多的字符串字面量。他们后面总是调用.to_string()或into()。现在深入研究一下原因。 字符串字面量 我们可以通过将原始文本括在双引号里面来定义字符串文字: let s = "Hello, world!
Trait Bounds(Traits约束) 我们已经看到了两种traits的用例: 解锁“内置”行为(例如:运算符重载) 为已经存在的类型添加新的行为(例如:为u32类型添加is_even方法) 现在是第三种用例:泛型编程 引入问题 到目前为止,我们的所有函数和方法都是和具体类型一起工作的。
Derive macros(派生宏) 上一节,我们为Ticket结构体实现了PartialEq这个trait,使其可以使用比较运算符(==、!=),但是,如果我们想要为大量的结构体实现这个比较基础的trait,那么我们可能要手动写大量的代码,可能重复性很高,导致代码又臭又长。 为了解决这个问题,Ru
运算符重载 现在我们对于traits有了基本的了解,回到运算符重载上来。运算符重载就是对一些运算符(比如+,-,*,/,==,!=等)的行为进行自定义。 运算符是traits 在Rust里,运算符就是traits。 对于每一个运算符,都有相应的trait来定义这个运算符的行为。通过对我们自己的类型实