pull/142/head
sunface 3 years ago
commit e09d94bb8c

@ -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();
```
运行一下

@ -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
<img alt="" src="/img/mingw-w64-download.png" class="center" />
若您觉得下载太慢,可以试试由[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,46 +93,58 @@ 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**.
### 本地文档

@ -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. Rusts 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)

@ -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() {

@ -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 {

@ -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 表达式来处理不同类型的消息
}
}

@ -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

Loading…
Cancel
Save