diff --git a/book/contents/basic/variable.md b/book/contents/basic/variable.md index 257b9a62..2a6d67f9 100644 --- a/book/contents/basic/variable.md +++ b/book/contents/basic/variable.md @@ -158,7 +158,8 @@ fn main() { $ cargo run Compiling variables v0.1.0 (file:///projects/variables) ... -The value of x is: 12 +The value of x in the inner scope is: 12 +The value of x is: 6 ``` 这和`mut`变量的使用是不同的,第二个let生成了完全不同的新变量,两个变量只是恰好拥有同样的名称,涉及一次内存对象的再分配 @@ -174,11 +175,11 @@ let spaces = " "; let spaces = spaces.len(); ``` -这种结构是允许的,因为第一个 `spaces` 变量是一个字符串类型,第二个 `spaces` 变量是一个全新的变量且和第第一个具有相同的变量名,且是一个数值类型。所以变量遮蔽可以帮我们节省些脑细胞,不用去想如`spaces_str` 和 `spaces_num`此类的变量名;相反我们可以重复使用更简单的 `spaces` 变量名。 你也可以不用`let`: +这种结构是允许的,因为第一个 `spaces` 变量是一个字符串类型,第二个 `spaces` 变量是一个全新的变量且和第一个具有相同的变量名,且是一个数值类型。所以变量遮蔽可以帮我们节省些脑细胞,不用去想如`spaces_str` 和 `spaces_num`此类的变量名;相反我们可以重复使用更简单的 `spaces` 变量名。 你也可以不用`let`: ```rust, - let mut spaces = " "; - spaces = spaces.len(); +let mut spaces = " "; +spaces = spaces.len(); ``` 运行一下 diff --git a/book/contents/first-try/installation.md b/book/contents/first-try/installation.md index f74a10ef..d0aed541 100644 --- a/book/contents/first-try/installation.md +++ b/book/contents/first-try/installation.md @@ -61,31 +61,25 @@ Current installation options: **2、x86_64-pc-windows-gnu** -该类型的C++ 环境其实官方也有说明 [Other Rust Installation Methods](https://forge.rust-lang.org/infra/other-installation-methods.html#other-rust-installation-methods). +相比于msvc版本来说,gnu版本具有更轻量,更靠近linux的优势 -个人习惯使用 [mingw-w64 官网](https://www.mingw-w64.org/) , 当然你也可以选择[win-builds](http://win-builds.org/). +### 更新和卸载 -为了方便初学者使用 这里提供一个免安装的的方式 [mingw-w64下载](https://sourceforge.net/projects/mingw-w64/files/),演示选择的 `x86_64-posix-seh` 对于学习者,初次安装不需要纠结什么类别,因为切换版本很方便。下载完压缩包并解压,把压缩包下的 `/bin` 目录添加到 环境`Path` 即可: +首先,根据[MSYS2官网](https://www.msys2.org/)配置MSYS - +若您觉得下载太慢,可以试试由[Caviar-X](https://github.com/Caviar-X)提供的[代理](https://github.pigeons.icu/msys2/msys2-installer/releases/download/2021-11-30/msys2-x86_64-20211130.exe) -1、验证 c++ 环境 -``` shell -PS C:\Users\Hehongyuan> c++ -v -Using built-in specs. -COLLECT_GCC=C:\ENV\mingw64\bin\c++.exe -COLLECT_LTO_WRAPPER=C:/ENV/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe -Target: x86_64-w64-mingw32 -Configured with: xxxxxxxxxxxxxx -gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) +在安装mingw-toolchain后,请将`%MSYS安装路径%\mingw64\bin`添加到系统变量`PATH`中 +配置好后,在MSYS中输入 +```bash +$ curl https://sh.rustup.rs -sSf | sh ``` +来安装rustup -2、安装 Rust 注意选择 `Customize installation` 并设置 `host triple` 为 `x86_64-pc-windows-gnu` +之后,根据以下输出进行配置 -``` shell -PS C:\Users\Hehongyuan> rustup-init.exe -...... +```text Current installation options: @@ -99,49 +93,61 @@ Current installation options: 3) Cancel installation >2 -I m going to ask you the value of each of these installation options. +I'm going to ask you the value of each of these installation options. You may simply press the Enter key to leave unchanged. Default host triple? [x86_64-pc-windows-msvc] x86_64-pc-windows-gnu Default toolchain? (stable/beta/nightly/none) [stable] - +stable Profile (which tools and data to install)? (minimal/default/complete) [default] +complete -``` +Modify PATH variable? (Y/n) +Y -> windows上安装过程较为麻烦,因此我们专门写了一篇文章来讲解相关的安装过程,请参考:[Windows安装](https://blog.csdn.net/erlib/article/details/121684998?spm=1001.2014.3001.5501). +Current installation options: -### 更新和卸载 -通过 `rustup` 安装 Rust 后,更新到最新版本很简单。在终端中运行以下更新命令: + default host triple: x86_64-pc-windows-gnu + default toolchain: stable + profile: complete + modify PATH variable: yes -```console -$ rustup update +1) Proceed with installation (default) +2) Customize installation +3) Cancel installation +> ``` +之后,按下1,等待 -要卸载 `Rust` 和 `rustup`,在终端中运行以下卸载命令: +完成后,您就已经安装了 `Rust` 和 `rustup` -```console -$ rustup self uninstall +要卸载 `Rust` 和 `rustup`,在MSYS中运行以下卸载命令: + +```bash +rustup self uninstall ``` ### 检查安装是否成功 检查是否正确安装了 Rust,可打开终端并输入下面这行, 此时能看到最新发布的稳定版本的版本号、提交哈希值和提交日期: -```console +```bash $ rustc -V rustc 1.56.1 (59eed8a2a 2021-11-01) +$ cargo -V +cargo 1.57.0 (b2e52d7ca 2021-10-21) ``` +> 注: 若发现版本号不同,以您的版本号为准 -恭喜,你已成功安装 Rust!如果没看到此信息,并且你使用的是 Windows,请检查 Rust 是否在 `%PATH%` 系统变量中。如果都正确,但 `Rust` 仍然无法正常工作,那么你可以在很多地方获得帮助。最简单的是**加入Rust编程学院这个大家庭,QQ群:1009730433**. +恭喜,你已成功安装 Rust!如果没看到此信息,并且你使用的是 Windows,请检查 Rust 或 `%USERPROFILE%\.cargo\bin` 是否在 `%PATH%` 系统变量中。如果都正确,但 `Rust` 仍然无法正常工作,那么你可以在很多地方获得帮助。最简单的是**加入Rust编程学院这个大家庭,QQ群:1009730433**. ### 本地文档 安装Rust的同时也会在本地安装一个文档服务,方便我们离线阅读: 运行 `rustup doc` 让浏览器打开本地文档。 -每当遇到标准库提供的类型或函数不知道怎么用时,都可以在 API 文档中查找到!具体参见[在标准库寻找你想要的内容](../std/search.md) \ No newline at end of file +每当遇到标准库提供的类型或函数不知道怎么用时,都可以在 API 文档中查找到!具体参见[在标准库寻找你想要的内容](../std/search.md) diff --git a/exercise/exercises/enums/README.md b/exercise/exercises/enums/README.md index 30d4d91d..a3603be1 100644 --- a/exercise/exercises/enums/README.md +++ b/exercise/exercises/enums/README.md @@ -1,10 +1,11 @@ -# Enums +# 枚举(enums) -Rust allows you to define types called "enums" which enumerate possible values. -Enums are a feature in many languages, but their capabilities differ in each language. Rust’s enums are most similar to algebraic data types in functional languages, such as F#, OCaml, and Haskell. -Useful in combination with enums is Rust's "pattern matching" facility, which makes it easy to run different code for different values of an enumeration. +Rust 有一种叫做“枚举”的类型,这种类型列举出了某种集合中所有可能的值。 +枚举是许多语言共有的一个功能,但它的作用在每种语言中都有所不同。 +如 F#、OCaml 和 Haskell 之类的函数式语言中的代数数据类型(algebraic data types)和 Rust 的枚举很相似。 +Rust 的“模式匹配”功能与枚举结合起非常强大,利用它我们很容易就能针对枚举的不同类型运行不同的代码。 -## Further information +## 更多信息 - [Enums](https://doc.rust-lang.org/book/ch06-00-enums.html) - [Pattern syntax](https://doc.rust-lang.org/book/ch18-03-pattern-syntax.html) diff --git a/exercise/exercises/enums/enums1.rs b/exercise/exercises/enums/enums1.rs index a2223d33..1cc15cad 100644 --- a/exercise/exercises/enums/enums1.rs +++ b/exercise/exercises/enums/enums1.rs @@ -1,11 +1,11 @@ // enums1.rs -// Make me compile! Execute `rustlings hint enums1` for hints! +// 让我能够编译!执行 `rustex hint enums1` 获取提示 :) // I AM NOT DONE #[derive(Debug)] enum Message { - // TODO: define a few types of messages as used below + // TODO:遵照下面的使用方式来定义几种 Message 的类型 } fn main() { diff --git a/exercise/exercises/enums/enums2.rs b/exercise/exercises/enums/enums2.rs index ec32d952..eac3f5e4 100644 --- a/exercise/exercises/enums/enums2.rs +++ b/exercise/exercises/enums/enums2.rs @@ -1,11 +1,11 @@ // enums2.rs -// Make me compile! Execute `rustlings hint enums2` for hints! +// 让我能够编译!执行 `rustex hint enums2` 获取提示! // I AM NOT DONE #[derive(Debug)] enum Message { - // TODO: define the different variants used below + // TODO:定义下面使用到的多种 Message 类型 } impl Message { diff --git a/exercise/exercises/enums/enums3.rs b/exercise/exercises/enums/enums3.rs index 178b40c4..88087d6e 100644 --- a/exercise/exercises/enums/enums3.rs +++ b/exercise/exercises/enums/enums3.rs @@ -1,10 +1,10 @@ // enums3.rs -// Address all the TODOs to make the tests pass! +// 解决所有的 TODO ,通过测试! // I AM NOT DONE enum Message { - // TODO: implement the message variant types based on their usage below + // TODO:根据以下的使用方式,实现 Message 的不同类型 } struct Point { @@ -36,7 +36,7 @@ impl State { } fn process(&mut self, message: Message) { - // TODO: create a match expression to process the different message variants + // TODO:使用 match 表达式来处理不同类型的消息 } } diff --git a/exercise/info.toml b/exercise/info.toml index 63a3615a..7b0c682a 100644 --- a/exercise/info.toml +++ b/exercise/info.toml @@ -309,21 +309,22 @@ name = "enums1" path = "exercises/enums/enums1.rs" mode = "compile" hint = """ -Hint: The declaration of the enumeration type has not been defined yet.""" +提示:枚举类型还没有被定义。""" [[exercises]] name = "enums2" path = "exercises/enums/enums2.rs" mode = "compile" hint = """ -Hint: you can create enumerations that have different variants with different types -such as no data, anonymous structs, a single string, tuples, ...etc""" +提示:你可以创建多种不同类型的枚举,如不包含值、匿名结构*、字符串、元组,等等。 + +译:匿名结构可能是不命名字段名的结构""" [[exercises]] name = "enums3" path = "exercises/enums/enums3.rs" mode = "test" -hint = "No hints this time ;)" +hint = "这次没有提示 ;)" # MODULES