欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入解析Rust编程语言基础教程(第一篇)

时间:11-23 现代故事 提交错误

各位老铁们,大家好,今天由我来为大家分享深入解析Rust编程语言基础教程(第一篇),以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

第一部分-2

第5章 trait

1. 成员方法

Traits相当于Java的接口(interface)+实现(impl),内在方法相当于类。 --Rust 没有Class

self和self: Self代表实现trait的类型,self代表具体的例子。 Self 必须是方法的第一个参数(这与python 相同)。 Trait 可以包含方法的默认实现,这样在具体实现中就不需要它了。编写重复的代码。 Impl对象不一定是Struct,甚至可以是trait

2. 静态方法

3. 扩展方法

Trait可以用来为其他类型添加成员方法(相比类,更灵活),但是有一个规则(孤儿规则): impl 要么在与特征相同的crate 中声明,要么在同一个crate 中声明相同的类型。trait只是描述类型的"特性",定义了针对类型的"约束",其本身并没有具体大小,因而无法作为变量,参数,返回值。 (这和接口不同,Java和Go都有将具体类型转换为接口调用的习惯。)

4. 完整的函数调用

如果出现同名trait,可以通过完全限定来调用:5-1.jpg 010- 1010 Trait 可以用作泛型类型的约束(where),允许编译器检查Trait 的实现类型。通过‘:’可以实现Trait继承(即需要同时实现impl)

5. trait继承与约束

使用#[derive()]可以让编译器自动添加impl块。

5-2.png

6. Derive

7. trait别名(type)

Display和Debug,控制打印格式,分别是{}和{:}ToString。 Display 也实现了这一特性。 PartialOrd/Ord/PartialEq/Eq:只有实现了Ord(Total order)才可以称为sort排序。 Size: 本身不能实现,而是由编译器导出。 Default:专门用于实例化简单实例化,无需参数和错误处理。

8. 标准库常见trait

第6章 数组和字符串

数组是一个容器,必须有类型和大小。切片,使用Rust中的借位操作生成数组切片(Slice),它是一个胖指针(第一个元素+大小)Range:使用. 生成左闭右开范围,=生成左闭右开的范围。结合它,可以更灵活地对数组进行切片(通过限制Range来控制初始位置和大小)。从胖指针的定义可以看出,Rust 的Slice 与Go 的不同。 Rust中的index[]操作是在Bounds检查中进行的,所以速度会低于C/C++。因此,不建议使用for+[]模式操作数组,而是使用for in iterator方法。6-1.png6-2.png

1. 数组

str是Rust中的内置类型,借用自海峡Rust中的字符串默认使用utf-8编码,内置的Char类型长度为4个字节。因此,字符数不能直接通过s[n]获取。需要这个:s.chars().nth(n) str类型也是一个胖指针,包括首字指针和长度。 String在堆上动态申请一块内存,因此可以编辑。 String 类型可以通过Deref ‘Dereference’ 自动转换为str 类型

2. 字符串

第7章 数组和字符串

‘Patern Destruct’ 是一个重要且实用的设计(Es6 有),可以轻松拆解一个复杂的结构

1. 简介

匹配的是与switch 类似,对于Value 来说是分支的,但Rust 需要对所有可能性进行“完整”检查,以避免遗漏处理。可以用_,来替换一些不需要处理的值。

7-1. pngmatch 加上if 形成“匹配守卫”(高级开关),这可能会导致编译器生成“完整且缺失”的误报。

使用@进行符号判断

使用ref 关键字将引用绑定到匹配的对象。

2. match

它们是Rust 语法糖,表示只需要匹配某些模式,而不是“完全缺失”

3. if-let和while-let

默认情况下,传递参数时支持模式解构

4. 函数参数与闭包做模式解构

第8章 深入类型系统

代数数据类型(Algebraic data) type)类似信息论,计算每个类型携带的信息(位)——基数

1. 代数类型系统

,例如: enum Never {},所以不能只有类型,不能构造变量。基数为0;占用内存为0;无法处理此类代码的执行;返回该类型代码,无法返回;可转换为任意类型。在Rust 中使用时,使用"!代表

2. Never Type

选项解决了空指针问题

8-2.pngOption有很多方便的成员函数,比如map、unwrap、expect等(推荐阅读API)

Option开销也很小(使用Option类型包裹指针和C/C++指针完全没有区别)

用户评论

笑傲苍穹

终于看到一篇关于Rust的文章了,一直想入坑!

    有13位网友表示赞同!

一点一点把你清空

深度浅出的讲解,对我这种菜鸟刚好合适!

    有18位网友表示赞同!

念安я

Rust越来越 popular 了吧? 感觉学习它会很有前景。

    有16位网友表示赞同!

代价是折磨╳

希望能多写一些 Rust 的实践案例,方便理解。

    有9位网友表示赞同!

堕落爱人!

第一部分是什么内容呢?期待第二部分的讲解

    有5位网友表示赞同!

烟花巷陌

作者写的文字风格很好,通俗易懂。

    有6位网友表示赞同!

刺心爱人i

我想了解一下 Rust 在实际项目中是如何应用的。

    有15位网友表示赞同!

清羽墨安

Rust 的安全性很强吗?有什么具体的例子吗?

    有15位网友表示赞同!

绝版女子

学习一门新的编程语言需要多久才能入门呢?

    有6位网友表示赞同!

荒野情趣

这篇文章会不会包含 Rust 的数据结构和算法讲解?

    有15位网友表示赞同!

有些人,只适合好奇~

有没有一些推荐的 Rust 学习资源,比如书籍或者网站?

    有13位网友表示赞同!

安好如初

Rust 和其他语言有什么区别,优势在哪里?

    有5位网友表示赞同!

我绝版了i

最近在想学习 Rust,这个系列文章看起来很有用!

    有10位网友表示赞同!

为爱放弃

希望能详细讲解 Rust 的并发编程模型。

    有18位网友表示赞同!

一样剩余

有没有一些关于 Rust 的开源项目可以参考学习呢?

    有14位网友表示赞同!

几妆痕

Rust 的语法是不是比较难理解?

    有17位网友表示赞同!

泪湿青衫

这篇文章适合什么类型的学习者?

    有5位网友表示赞同!

不要冷战i

有没有在线的代码练习平台可以用来学习 Rust?

    有9位网友表示赞同!

惯例

期待这个系列文章能够系统性的解释 Rust

    有16位网友表示赞同!

初阳

想了解一下 Rust 的内存管理机制是如何运作的?

    有19位网友表示赞同!

【深入解析Rust编程语言基础教程(第一篇)】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活