@@ -239,20 +239,6 @@ impl Rectangle {
-
-
diff --git a/docs/ch06-00-enums.html b/docs/ch06-00-enums.html
index 46acef1..19dd0ea 100644
--- a/docs/ch06-00-enums.html
+++ b/docs/ch06-00-enums.html
@@ -47,7 +47,7 @@
@@ -117,20 +117,6 @@ commit 396e2db4f7de2e5e7869b1f8bc905c45c631ad7d
-
-
diff --git a/docs/ch06-01-defining-an-enum.html b/docs/ch06-01-defining-an-enum.html
index 742b3bc..845d466 100644
--- a/docs/ch06-01-defining-an-enum.html
+++ b/docs/ch06-01-defining-an-enum.html
@@ -47,7 +47,7 @@
@@ -312,20 +312,6 @@ not satisfied
-
-
diff --git a/docs/ch06-02-match.html b/docs/ch06-02-match.html
index 456cc6f..91b393b 100644
--- a/docs/ch06-02-match.html
+++ b/docs/ch06-02-match.html
@@ -47,7 +47,7 @@
@@ -277,20 +277,6 @@ match some_u8_value {
-
-
diff --git a/docs/ch06-03-if-let.html b/docs/ch06-03-if-let.html
index 433e8d7..5849177 100644
--- a/docs/ch06-03-if-let.html
+++ b/docs/ch06-03-if-let.html
@@ -47,7 +47,7 @@
@@ -86,6 +86,62 @@ match some_u8_value {
Some(3)
+
我们想要对Some(3)
匹配进行操作不过不想处理任何其他Some<u8>
值或None
值。为了满足match
表达式(穷尽性)的要求,必须在处理完这唯一的成员后加上_ => ()
,这样也要增加很多样板代码。
+
不过我们可以使用if let
这种更短的方式编写。如下代码与列表 6-6 中的match
行为一致:
+
# let some_u8_value = Some(0u8);
+if let Some(3) = some_u8_value {
+ println!("three");
+}
+
+
if let
获取通过=
分隔的一个模式和一个表达式。它的工作方式与match
相同,这里的表达式对应match
而模式则对应第一个分支。
+
使用if let
意味着编写更少代码,更少的缩进和更少的样板代码。然而,这样会失去match
强制要求的穷进行检查。match
和if let
之间的选择依赖特定的环境以及增加简洁度和失去穷尽性检查的权衡取舍。
+
换句话说,可以认为if let
是match
的一个语法糖,它当值匹配某一模式时执行代码而忽略所有其他值。
+
可以在if let
中包含一个else
。else
块中的代码与match
表达式中的_
分支块中的代码相同,这样的match
表达式就等同于if let
和else
。回忆一下列表 6-4 中Coin
枚举的定义,它的Quarter
成员包含一个UsState
值。如果想要计数所有不是 25 美分的硬币的同时也报告 25 美分硬币所属的州,可以使用这样一个match
表达式:
+
# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+match coin {
+ Coin::Quarter(state) => println!("State quarter from {:?}!", state),
+ _ => count += 1,
+}
+
+
或者可以使用这样的if let
和else
表达式:
+
# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+if let Coin::Quarter(state) = coin {
+ println!("State quarter from {:?}!", state);
+} else {
+ count += 1;
+}
+
+
如果你的程序遇到一个使用match
表达起来过于啰嗦的逻辑,记住if let
也在你的 Rust 工具箱中。
+
总结
+
现在我们涉及到了如何使用枚举来创建有一系列可列举值的自定义类型。我们也展示了标准库的Option<T>
类型是如何帮助你利用类型系统来避免出错。当枚举值包含数据时,你可以根据需要处理多少情况来选择使用match
或if let
来获取并使用这些值。
+
你的 Rust 程序现在能够使用结构体和枚举在自己的作用域内表现其内容了。在你的 API 中使用自定义类型保证了类型安全:编译器会确保你的函数只会得到它期望的类型的值。
+
为了向你的用户提供一个组织良好的 API,它使用直观且只向用户暴露他们确实需要的部分,那么让我们转向 Rust 的模块系统吧。
@@ -97,6 +153,10 @@ match some_u8_value {
+
+
+
+
@@ -107,6 +167,10 @@ match some_u8_value {
+
+
+
+
@@ -120,20 +184,6 @@ match some_u8_value {
-
-
diff --git a/docs/ch07-00-modules.html b/docs/ch07-00-modules.html
new file mode 100644
index 0000000..3a23abf
--- /dev/null
+++ b/docs/ch07-00-modules.html
@@ -0,0 +1,116 @@
+
+
+
+
+
Rust 程序设计语言 中文版
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ch07-01-mod-and-the-filesystem.html b/docs/ch07-01-mod-and-the-filesystem.html
new file mode 100644
index 0000000..8742049
--- /dev/null
+++ b/docs/ch07-01-mod-and-the-filesystem.html
@@ -0,0 +1,116 @@
+
+
+
+
+
Rust 程序设计语言 中文版
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ch07-02-controlling-visibility-with-pub.html b/docs/ch07-02-controlling-visibility-with-pub.html
new file mode 100644
index 0000000..2ddd01e
--- /dev/null
+++ b/docs/ch07-02-controlling-visibility-with-pub.html
@@ -0,0 +1,116 @@
+
+
+
+
+
Rust 程序设计语言 中文版
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ch07-03-importing-names-with-use.html b/docs/ch07-03-importing-names-with-use.html
new file mode 100644
index 0000000..6135efd
--- /dev/null
+++ b/docs/ch07-03-importing-names-with-use.html
@@ -0,0 +1,108 @@
+
+
+
+
+
Rust 程序设计语言 中文版
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/index.html b/docs/index.html
index 4fec122..55e6998 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -46,7 +46,7 @@
@@ -112,20 +112,6 @@ registry site),
crates.io!我们期待看
-
-
diff --git a/docs/print.html b/docs/print.html
index eceecbd..2808291 100644
--- a/docs/print.html
+++ b/docs/print.html
@@ -47,7 +47,7 @@
@@ -3048,6 +3048,62 @@ match some_u8_value {
Some(3)
+
我们想要对Some(3)
匹配进行操作不过不想处理任何其他Some<u8>
值或None
值。为了满足match
表达式(穷尽性)的要求,必须在处理完这唯一的成员后加上_ => ()
,这样也要增加很多样板代码。
+
不过我们可以使用if let
这种更短的方式编写。如下代码与列表 6-6 中的match
行为一致:
+
# let some_u8_value = Some(0u8);
+if let Some(3) = some_u8_value {
+ println!("three");
+}
+
+
if let
获取通过=
分隔的一个模式和一个表达式。它的工作方式与match
相同,这里的表达式对应match
而模式则对应第一个分支。
+
使用if let
意味着编写更少代码,更少的缩进和更少的样板代码。然而,这样会失去match
强制要求的穷进行检查。match
和if let
之间的选择依赖特定的环境以及增加简洁度和失去穷尽性检查的权衡取舍。
+
换句话说,可以认为if let
是match
的一个语法糖,它当值匹配某一模式时执行代码而忽略所有其他值。
+
可以在if let
中包含一个else
。else
块中的代码与match
表达式中的_
分支块中的代码相同,这样的match
表达式就等同于if let
和else
。回忆一下列表 6-4 中Coin
枚举的定义,它的Quarter
成员包含一个UsState
值。如果想要计数所有不是 25 美分的硬币的同时也报告 25 美分硬币所属的州,可以使用这样一个match
表达式:
+
# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+match coin {
+ Coin::Quarter(state) => println!("State quarter from {:?}!", state),
+ _ => count += 1,
+}
+
+
或者可以使用这样的if let
和else
表达式:
+
# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+if let Coin::Quarter(state) = coin {
+ println!("State quarter from {:?}!", state);
+} else {
+ count += 1;
+}
+
+
如果你的程序遇到一个使用match
表达起来过于啰嗦的逻辑,记住if let
也在你的 Rust 工具箱中。
+
总结
+
现在我们涉及到了如何使用枚举来创建有一系列可列举值的自定义类型。我们也展示了标准库的Option<T>
类型是如何帮助你利用类型系统来避免出错。当枚举值包含数据时,你可以根据需要处理多少情况来选择使用match
或if let
来获取并使用这些值。
+
你的 Rust 程序现在能够使用结构体和枚举在自己的作用域内表现其内容了。在你的 API 中使用自定义类型保证了类型安全:编译器会确保你的函数只会得到它期望的类型的值。
+
为了向你的用户提供一个组织良好的 API,它使用直观且只向用户暴露他们确实需要的部分,那么让我们转向 Rust 的模块系统吧。
@@ -3074,20 +3130,6 @@ match some_u8_value {
-
-
diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index 5b02b6a..27cb06b 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -26,4 +26,11 @@
- [枚举和模式匹配](ch06-00-enums.md)
- [定义枚举](ch06-01-defining-an-enum.md)
- [`match`控制流运算符](ch06-02-match.md)
- - [`if let`简单控制流](ch06-03-if-let.md)
\ No newline at end of file
+ - [`if let`简单控制流](ch06-03-if-let.md)
+
+## 基本 Rust 技能
+
+- [模块](ch07-00-modules.md)
+ - [`mod`和文件系统](ch07-01-mod-and-the-filesystem.md)
+ - [使用`pub`空值可见性](ch07-02-controlling-visibility-with-pub.md)
+ - [使用`use`导入命名空间](ch07-03-importing-names-with-use.md)
\ No newline at end of file
diff --git a/src/ch06-03-if-let.md b/src/ch06-03-if-let.md
index 5bbf59d..c7b3cb7 100644
--- a/src/ch06-03-if-let.md
+++ b/src/ch06-03-if-let.md
@@ -24,3 +24,76 @@ Listing 6-6: A `match` that only cares about executing code when the value is
+我们想要对`Some(3)`匹配进行操作不过不想处理任何其他`Some
`值或`None`值。为了满足`match`表达式(穷尽性)的要求,必须在处理完这唯一的成员后加上`_ => ()`,这样也要增加很多样板代码。
+
+不过我们可以使用`if let`这种更短的方式编写。如下代码与列表 6-6 中的`match`行为一致:
+
+```rust
+# let some_u8_value = Some(0u8);
+if let Some(3) = some_u8_value {
+ println!("three");
+}
+```
+
+`if let`获取通过`=`分隔的一个模式和一个表达式。它的工作方式与`match`相同,这里的表达式对应`match`而模式则对应第一个分支。
+
+使用`if let`意味着编写更少代码,更少的缩进和更少的样板代码。然而,这样会失去`match`强制要求的穷进行检查。`match`和`if let`之间的选择依赖特定的环境以及增加简洁度和失去穷尽性检查的权衡取舍。
+
+换句话说,可以认为`if let`是`match`的一个语法糖,它当值匹配某一模式时执行代码而忽略所有其他值。
+
+可以在`if let`中包含一个`else`。`else`块中的代码与`match`表达式中的`_`分支块中的代码相同,这样的`match`表达式就等同于`if let`和`else`。回忆一下列表 6-4 中`Coin`枚举的定义,它的`Quarter`成员包含一个`UsState`值。如果想要计数所有不是 25 美分的硬币的同时也报告 25 美分硬币所属的州,可以使用这样一个`match`表达式:
+
+```rust
+# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+match coin {
+ Coin::Quarter(state) => println!("State quarter from {:?}!", state),
+ _ => count += 1,
+}
+```
+
+或者可以使用这样的`if let`和`else`表达式:
+
+```rust
+# #[derive(Debug)]
+# enum UsState {
+# Alabama,
+# Alaska,
+# }
+#
+# enum Coin {
+# Penny,
+# Nickel,
+# Dime,
+# Quarter(UsState),
+# }
+# let coin = Coin::Penny;
+let mut count = 0;
+if let Coin::Quarter(state) = coin {
+ println!("State quarter from {:?}!", state);
+} else {
+ count += 1;
+}
+```
+
+如果你的程序遇到一个使用`match`表达起来过于啰嗦的逻辑,记住`if let`也在你的 Rust 工具箱中。
+
+## 总结
+
+现在我们涉及到了如何使用枚举来创建有一系列可列举值的自定义类型。我们也展示了标准库的`Option`类型是如何帮助你利用类型系统来避免出错。当枚举值包含数据时,你可以根据需要处理多少情况来选择使用`match`或`if let`来获取并使用这些值。
+
+你的 Rust 程序现在能够使用结构体和枚举在自己的作用域内表现其内容了。在你的 API 中使用自定义类型保证了类型安全:编译器会确保你的函数只会得到它期望的类型的值。
+
+为了向你的用户提供一个组织良好的 API,它使用直观且只向用户暴露他们确实需要的部分,那么让我们转向 Rust 的模块系统吧。
\ No newline at end of file
diff --git a/src/ch07-00-modules.md b/src/ch07-00-modules.md
new file mode 100644
index 0000000..e69de29
diff --git a/src/ch07-01-mod-and-the-filesystem.md b/src/ch07-01-mod-and-the-filesystem.md
new file mode 100644
index 0000000..e69de29
diff --git a/src/ch07-02-controlling-visibility-with-pub.md b/src/ch07-02-controlling-visibility-with-pub.md
new file mode 100644
index 0000000..e69de29
diff --git a/src/ch07-03-importing-names-with-use.md b/src/ch07-03-importing-names-with-use.md
new file mode 100644
index 0000000..e69de29