From 4b67ad99dfdc9fa13c4797232d1193bcfefceabc Mon Sep 17 00:00:00 2001 From: sunface Date: Fri, 7 Jan 2022 10:38:43 +0800 Subject: [PATCH] fix typos --- book/contents/SUMMARY.md | 24 +++++++++++++----------- book/contents/converse/enum-int.md | 12 +++++++----- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/book/contents/SUMMARY.md b/book/contents/SUMMARY.md index af4c3998..5df75da1 100644 --- a/book/contents/SUMMARY.md +++ b/book/contents/SUMMARY.md @@ -89,20 +89,10 @@ - [一些写代码的技巧 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) - - [算术溢出导致的panic](pitfalls/arithmetic-overflow.md) - - [闭包中奇怪的生命周期](pitfalls/closure-with-lifetime.md) - - [可变变量不可变?](pitfalls/the-disabled-mutability.md) - - [可变借用失败引发的深入思考](pitfalls/multiple-mutable-references.md) - - [不太勤快的迭代器](pitfalls/lazy-iterators.md) - - [奇怪的序列x..y](pitfalls/weird-ranges.md) - - [无处不在的迭代器](pitfalls/iterator-everywhere.md) - [对抗编译检查(持续更新)](fight-with-compiler/intro.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) - [生命周期过大-02](fight-with-compiler/lifetime/too-long2.md) - [循环中的生命周期](fight-with-compiler/lifetime/loop.md) @@ -112,6 +102,18 @@ - [智能指针引起的重复借用错误](fight-with-compiler/borrowing/borrow-distinct-fields-of-struct.md) - [类型未限制(todo)](fight-with-compiler/unconstrained.md) + +- [Rust陷阱系列(持续更新)](pitfalls/index.md) + - [for循环中使用外部数组](pitfalls/use-vec-in-for.md) + - [线程类型导致的栈溢出](pitfalls/stack-overflow.md) + - [算术溢出导致的panic](pitfalls/arithmetic-overflow.md) + - [闭包中奇怪的生命周期](pitfalls/closure-with-lifetime.md) + - [可变变量不可变?](pitfalls/the-disabled-mutability.md) + - [可变借用失败引发的深入思考](pitfalls/multiple-mutable-references.md) + - [不太勤快的迭代器](pitfalls/lazy-iterators.md) + - [奇怪的序列x..y](pitfalls/weird-ranges.md) + - [无处不在的迭代器](pitfalls/iterator-everywhere.md) + - [进阶类型转换](converse/intro.md) - [枚举和整数](converse/enum-int.md) diff --git a/book/contents/converse/enum-int.md b/book/contents/converse/enum-int.md index 24cb4056..68cd4938 100644 --- a/book/contents/converse/enum-int.md +++ b/book/contents/converse/enum-int.md @@ -1,6 +1,13 @@ # 整数转换为枚举 在Rust中,从枚举到整数的转换很容易,但是反过来,就没那么容易,甚至部分实现还挺邪恶, 例如使用`transmute`。 + +## 一个真实场景的需求 +在实际场景中,从枚举到整数的转换有时还是非常需要的,例如你有一个枚举类型,然后需要从外面穿入一个整数,用于控制后续的流程走向,此时就需要用整数去匹配相应的枚举(你也可以用整数匹配整数-, -,看看会不会被喷)。 + +既然有了需求,剩下的就是看看该如何实现,这篇文章的水远比你想象的要深,且看八仙过海各显神通。 + + ## C语言的实现 对于C语言来说,万物皆邪恶,因此我们不讨论安全,只看实现,不得不说很简洁: ```C @@ -49,11 +56,6 @@ fn main() { 就会报错: `MyEnum::A => {} mismatched types, expected i32, found enum MyEnum`。 -## 一个真实场景的需求 -在实际场景中,从枚举到整数的转换有时还是非常需要的,例如你有一个枚举类型,然后需要从外面穿入一个整数,用于控制后续的流程走向,此时就需要用整数去匹配相应的枚举(你也可以用整数匹配整数-, -,看看会不会被喷)。 - -既然有了需求,剩下的就是看看该如何实现,这篇文章的水远比你想象的要深,且看八仙过海各显神通。 - ## 使用三方库 首先可以想到的肯定是三方库,毕竟Rust的生态目前已经发展的很不错,类似的需求总是有的,这里我们先使用`num-traits`和`num-derive`来试试。