replace 元类型 with 单元类型

pull/310/head
sunface 3 years ago
parent 6c9621875d
commit dc8a463994

@ -18,7 +18,7 @@
- [变量绑定与解构](basic/variable.md) - [变量绑定与解构](basic/variable.md)
- [基本类型](basic/base-type/index.md) - [基本类型](basic/base-type/index.md)
- [数值类型](basic/base-type/numbers.md) - [数值类型](basic/base-type/numbers.md)
- [字符、布尔、元类型](basic/base-type/char-bool.md) - [字符、布尔、元类型](basic/base-type/char-bool.md)
- [语句与表达式](basic/base-type/statement-expression.md) - [语句与表达式](basic/base-type/statement-expression.md)
- [函数](basic/base-type/function.md) - [函数](basic/base-type/function.md)
- [所有权和借用](basic/ownership/index.md) - [所有权和借用](basic/ownership/index.md)
@ -109,18 +109,8 @@
- [创建异步任务](tokio/spawning.md) - [创建异步任务](tokio/spawning.md)
<!-- - [异步消息流](tokio/stream.md)) --> <!-- - [异步消息流](tokio/stream.md)) -->
- [Rust最佳实践 doing](practice/intro.md)
- [日常开发三方库精选](practice/third-party-libs.md)
- [一些写代码的技巧 todo](practice/coding-tips.md)
- [最佳实践 todo](practice/best-pratice.md)
- [值得学习的源代码 todo](practice/good-sourcecode.md)
- [代码规范 doing](practice/style-guide/intro.md)
- [命名规范](practice/style-guide/naming.md)
- [代码风格(todo)](practice/style-guide/code.md)
- [代码标记](practice/style-guide/mark.md)
- [Clippy](practice/style-guide/clippy.md)
- [对抗编译检查(持续更新)](fight-with-compiler/intro.md) - [对抗编译检查 doing](fight-with-compiler/intro.md)
- [幽灵数据(todo)](fight-with-compiler/phantom-data.md) - [幽灵数据(todo)](fight-with-compiler/phantom-data.md)
- [生命周期](fight-with-compiler/lifetime/intro.md) - [生命周期](fight-with-compiler/lifetime/intro.md)
- [生命周期过大-01](fight-with-compiler/lifetime/too-long1.md) - [生命周期过大-01](fight-with-compiler/lifetime/too-long1.md)
@ -133,7 +123,7 @@
- [类型未限制(todo)](fight-with-compiler/unconstrained.md) - [类型未限制(todo)](fight-with-compiler/unconstrained.md)
- [Rust陷阱系列(持续更新)](pitfalls/index.md) - [Rust陷阱系列](pitfalls/index.md)
- [for循环中使用外部数组](pitfalls/use-vec-in-for.md) - [for循环中使用外部数组](pitfalls/use-vec-in-for.md)
- [线程类型导致的栈溢出](pitfalls/stack-overflow.md) - [线程类型导致的栈溢出](pitfalls/stack-overflow.md)
- [算术溢出导致的panic](pitfalls/arithmetic-overflow.md) - [算术溢出导致的panic](pitfalls/arithmetic-overflow.md)
@ -145,7 +135,21 @@
- [无处不在的迭代器](pitfalls/iterator-everywhere.md) - [无处不在的迭代器](pitfalls/iterator-everywhere.md)
- [线程间传递消息导致主线程无法结束](pitfalls/main-with-channel-blocked.md) - [线程间传递消息导致主线程无法结束](pitfalls/main-with-channel-blocked.md)
- [如何实现一个链表]()
- [Rust最佳实践 doing](practice/intro.md)
- [日常开发三方库精选](practice/third-party-libs.md)
- [一些写代码的技巧 todo](practice/coding-tips.md)
- [最佳实践 todo](practice/best-pratice.md)
- [值得学习的源代码 todo](practice/good-sourcecode.md)
- [代码规范 doing](practice/style-guide/intro.md)
- [命名规范](practice/style-guide/naming.md)
- [代码风格(todo)](practice/style-guide/code.md)
- [代码标记 todo](practice/style-guide/mark.md)
- [Clippy todo](practice/style-guide/clippy.md)
- [如何实现一个链表 todo]()
- [Javascript 和 WASM todo]()
- [进阶类型转换](converse/intro.md) - [进阶类型转换](converse/intro.md)
- [枚举和整数](converse/enum-int.md) - [枚举和整数](converse/enum-int.md)

@ -178,7 +178,7 @@ error[E0308]: `match` arms have incompatible types // match的分支类型不同
4 | | 0..3 => i, 4 | | 0..3 => i,
| | - this is found to be of type `{integer}` // 该分支返回整数类型 | | - this is found to be of type `{integer}` // 该分支返回整数类型
5 | | _ => println!("不合规定的值:{}",i) 5 | | _ => println!("不合规定的值:{}",i)
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected integer, found `()` // 该分支返回()元类型 | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected integer, found `()` // 该分支返回()元类型
6 | | }; 6 | | };
| |_____- `match` arms have incompatible types | |_____- `match` arms have incompatible types
``` ```

@ -5,7 +5,7 @@
| 难点及链接 | 简介 | | 难点及链接 | 简介 |
|----- | ------ | |----- | ------ |
| [?](../basic/result-error/result.md#传播界的大明星:) | 用于简化错误传播 | | [?](../basic/result-error/result.md#传播界的大明星:) | 用于简化错误传播 |
| [()](../basic/base-type/function.md#无返回值) | 元类型 | | [()](../basic/base-type/function.md#无返回值) | 元类型 |
| `!` : [1](../basic/base-type/function.md#永不返回的函数), [2](../advance/custom-type.md#!从不返回类型) | 永不返回 | | `!` : [1](../basic/base-type/function.md#永不返回的函数), [2](../advance/custom-type.md#!从不返回类型) | 永不返回 |
| [@](../basic/match-pattern/all-patterns.md#绑定) | 为一个字段绑定另外一个变量 | | [@](../basic/match-pattern/all-patterns.md#绑定) | 为一个字段绑定另外一个变量 |
| ['a: 'b](../advance/lifetime/advance.md#生命周期约束) | 生命周期约束 | | ['a: 'b](../advance/lifetime/advance.md#生命周期约束) | 生命周期约束 |

@ -1,4 +1,4 @@
# 字符、布尔、元类型 # 字符、布尔、元类型
这三个类型所处的地位比较尴尬,你说它们重要吧,有时候也是不可或缺,说它们不重要吧,确实出现的身影不是很多,而且这三个类型都有一个共同点:简单,因此我们统一放在一起讲。 这三个类型所处的地位比较尴尬,你说它们重要吧,有时候也是不可或缺,说它们不重要吧,确实出现的身影不是很多,而且这三个类型都有一个共同点:简单,因此我们统一放在一起讲。
@ -55,14 +55,14 @@ fn main() {
使用布尔类型的场景主要在于流程控制,例如上述代码的中的 `if` 就是其中之一。 使用布尔类型的场景主要在于流程控制,例如上述代码的中的 `if` 就是其中之一。
## 元类型 ## 元类型
元类型就是 `()` ,对,你没看错,就是 `()` ,唯一的值也是 `()` ,一些读者读到这里可能就不愿意了,你也太敷衍了吧,管这叫类型? 元类型就是 `()` ,对,你没看错,就是 `()` ,唯一的值也是 `()` ,一些读者读到这里可能就不愿意了,你也太敷衍了吧,管这叫类型?
只能说,再不起眼的东西,都有其用途,在目前为止的学习过程中,大家已经看到过很多次 `fn main()` 函数的使用吧?那么这个函数返回什么呢? 只能说,再不起眼的东西,都有其用途,在目前为止的学习过程中,大家已经看到过很多次 `fn main()` 函数的使用吧?那么这个函数返回什么呢?
没错, `main` 函数就返回这个元类型 `()`,你不能说 `main` 函数无返回值,因为没有返回值的函数在 Rust 中是有单独的定义的:`发散函数`,顾名思义,无法收敛的函数。 没错, `main` 函数就返回这个元类型 `()`,你不能说 `main` 函数无返回值,因为没有返回值的函数在 Rust 中是有单独的定义的:`发散函数`,顾名思义,无法收敛的函数。
例如常见的 `println!()` 的返回值也是元类型 `()` 例如常见的 `println!()` 的返回值也是元类型 `()`
再比如,你可以用 `()` 作为 `map` 的值,表示我们不关注具体的值,只关注 `key`。 这种用法和 Go 语言的 ***struct{}*** 类似,可以作为一个值用来占位,但是完全**不占用**任何内存。 再比如,你可以用 `()` 作为 `map` 的值,表示我们不关注具体的值,只关注 `key`。 这种用法和 Go 语言的 ***struct{}*** 类似,可以作为一个值用来占位,但是完全**不占用**任何内存。

@ -115,7 +115,7 @@ fn main() {
对于 Rust 新手来说,有些返回类型很难理解,而且如果你想通过百度或者谷歌去搜索,都不好查询,因为这些符号太常见了,根本难以精确搜索到。 对于 Rust 新手来说,有些返回类型很难理解,而且如果你想通过百度或者谷歌去搜索,都不好查询,因为这些符号太常见了,根本难以精确搜索到。
例如元类型 `()`,是一个零长度的元组。它没啥作用,但是可以用来表达一个函数没有返回值: 例如元类型 `()`,是一个零长度的元组。它没啥作用,但是可以用来表达一个函数没有返回值:
- 函数没有返回值,那么返回一个 `()` - 函数没有返回值,那么返回一个 `()`
- 通过 `;` 结尾的表达式返回一个 `()` - 通过 `;` 结尾的表达式返回一个 `()`

@ -7,7 +7,7 @@ Rust 每个值都有其确切的数据类型,总的来说可以分为两类:
- 字符串:字符串字面量和字符串切片 `&str` - 字符串:字符串字面量和字符串切片 `&str`
- 布尔类型: `true`和`false` - 布尔类型: `true`和`false`
- 字符类型: 表示单个Unicode字符存储为4个字节 - 字符类型: 表示单个Unicode字符存储为4个字节
- 元类型: 即 `()` ,其唯一的值也是 `()` - 元类型: 即 `()` ,其唯一的值也是 `()`
## 类型推导与标注 ## 类型推导与标注

@ -182,7 +182,7 @@ println!("{:?}", user1);
元组结构体在你希望有一个整体名称,但是又不关心里面字段的名称时将非常有用。例如上面的`Point`元组结构体众所周知3D点是`(x,y,z)`形式的坐标点,因此我们无需再为内部的字段逐一命名为:`x`,`y`,`z`。 元组结构体在你希望有一个整体名称,但是又不关心里面字段的名称时将非常有用。例如上面的`Point`元组结构体众所周知3D点是`(x,y,z)`形式的坐标点,因此我们无需再为内部的字段逐一命名为:`x`,`y`,`z`。
## 元结构体(Unit-like Struct) ## 元结构体(Unit-like Struct)
还记得之前讲过的基本没啥用的[元类型](../base-type/char-bool.md#元类型)吧? 元结构体就跟它很像,没有任何字段和属性,但是好在,它还挺有用。 还记得之前讲过的基本没啥用的[单元类型](../base-type/char-bool.md#单)吧? 元结构体就跟它很像,没有任何字段和属性,但是好在,它还挺有用。
如果你定义一个类型,但是不关心该类型的内容, 只关心它的行为时,就可以使用`元结构体`: 如果你定义一个类型,但是不关心该类型的内容, 只关心它的行为时,就可以使用`元结构体`:
```rust ```rust

@ -0,0 +1,2 @@
https://www.reddit.com/r/rust/comments/sboyb2/designing_a_rust_rust_plugin_system/
Loading…
Cancel
Save