pull/107/head
sunface 3 years ago
parent bd246be347
commit a59295ae32

@ -79,6 +79,11 @@
- [Send、Sync(todo)](advance/multi-threads/send-sync.md)
## 专题内容,每个专题都配套一个小型项目进行实践
- [Rust最佳实践 doing](practice/intro.md)
- [日常开发三方库精选](practice/third-party-libs.md)
- [一些写代码的技巧 todo](practice/coding-tips.md)
- [最佳实践 todo](practice/best-pratice.md)
- [Rust陷阱系列](pitfalls/index.md)
- [for循环中使用外部数组](pitfalls/use-vec-in-for.md)
- [线程类型导致的栈溢出](pitfalls/stack-overflow.md)
@ -87,11 +92,7 @@
- [可变变量不可变?](pitfalls/the-disabled-mutability.md)
- [可变借用失败引发的深入思考](pitfalls/multiple-mutable-references.md)
- [不太勤快的迭代器](pitfalls/lazy-iterators.md)
- [Rust最佳实践 todo](practice/intro.md)
- [一些写代码的技巧 todo](practice/coding-tips.md)
- [最佳实践 todo](practice/best-pratice.md)
- [日常开发三方库精选](practice/third-party-libs.md)
- [奇怪的序列x..y](pitfalls/weird-ranges.md)
- [错误处理 todo](errors/intro.md)
- [简化错误处理](errors/simplify.md)
@ -138,6 +139,9 @@
- [基本用法](networking/async/tokio/basic.md)
- [异步消息流](networking/async/tokio/stream.md)
- [Web应用开发 todo](web/intro.md)
- [编解码与序列化 todo](web/serialization.md)
- [代码规范 doing](style-guide/intro.md)
- [命名规范](style-guide/naming.md)
- [代码风格(todo)](style-guide/code.md)

@ -1,7 +1,7 @@
# 基本类型
当一门语言不谈类型时,你得小心,这大概率是动态语言(别拍我,我承认是废话)。但是把类型大张旗鼓的用多个章节去讲的Rust是其中之一。
Rust每个值都有其确切的数据类型, 总的来说可以分为两类:基本类型和复合类型, 基本数据类型在Rust中是最最常见的数据类型基本类型意味着它们往往是一个最小化原子类型,无法解构为其它类型(一般意义上来说)基本类型由以下组成:
Rust每个值都有其确切的数据类型, 总的来说可以分为两类:基本类型和复合类型基本类型意味着它们往往是一个最小化原子类型,无法解构为其它类型(一般意义上来说),由以下组成:
- 数值类型: 有符号整数 (`i8`, `i16`, `i32`, `i64`, `isize`)、 无符号整数 (`u8`, `u16`, `u32`, `u64`, `usize`) 、浮点数 (`f32`, `f64`)、以及有理数、复数
- 字符串:字符串字面量、字符串切片&str和堆分配字符串String
@ -12,14 +12,14 @@ Rust每个值都有其确切的数据类型, 总的来说可以分为两类:
## 类型推导与标注
与`python`、`javascript`等动态语言不同Rust是一门静态类型语言也就是编译器必须在编译期知道我们所有变量的数据类型,但这不意味着你需要为你的每个变量指定类型,因为**Rust编译器很聪明它可以根据变量的值和使用方式来自动推导出变量的类型**,同时编译器也不够聪明,在某些情况下,它无法推导出变量类型,需要我们手动去给予一个类型标注,关于这一点在[Rust语言初印象](../../first-try/hello-world.md#Rust语言初印象)中有过展示.
与`python`、`javascript`等动态语言不同Rust是一门静态类型语言也就是编译器必须在编译期知道我们所有变量的类型但这不意味着你需要为每个变量指定类型因为**Rust编译器很聪明它可以根据变量的值和上下文中的使用方式来自动推导出变量的类型**,同时编译器也不够聪明,在某些情况下,它无法推导出变量类型,需要手动去给予一个类型标注,关于这一点在[Rust语言初印象](../../first-try/hello-world.md#Rust语言初印象)中有过展示.
来看段代码:
```rust
let guess = "42".parse().expect("Not a number!");
```
让我们先忽悠`.parse().expect..`部分,总之,这段代码将字符串`"42"`进行解析,但是我们没有标注想要解析的类型,因此编译器会报错:
先忽略`.parse().expect..`部分,这段代码的目的是将字符串`"42"`进行解析,而编译器在这里无法推导出我们想要的类型:整数?浮点数?字符串?因此编译器会报错:
```console
$ cargo build
Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
@ -30,5 +30,5 @@ error[E0282]: type annotations needed
| ^^^^^ consider giving `guess` a type
```
意味着,我们需要提供给编译器更多的信息,例如给`guess`变量一个**显示的类型标注**: `let guess:i32 = ...` 或者`"42".parse::<i32>()`.
因此我们需要提供给编译器更多的信息,例如给`guess`变量一个**显示的类型标注**: `let guess: i32 = ...` 或者`"42".parse::<i32>()`.

@ -0,0 +1,5 @@
# 奇怪的序列x..y
@todo
https://www.reddit.com/r/rust/comments/rrgxr0/a_critique_of_rusts_range_types/

@ -3,3 +3,5 @@
https://www.reddit.com/r/rust/comments/rgjsbt/whats_your_top_rust_tip_crate_tool_other_for/
https://www.reddit.com/r/rust/comments/rnmmqz/question_how_to_keep_code_dry_when_many_similar/
https://www.reddit.com/r/rust/comments/rrgho1/what_is_the_recommended_way_to_use_a_library/

@ -0,0 +1 @@
# Web应用开发 todo

@ -0,0 +1,4 @@
# 编解码与序列化 todo
## 多次序列化产出同一结果
https://www.reddit.com/r/rust/comments/rrizq5/is_serdejson_serialization_deterministic/
Loading…
Cancel
Save