diff --git a/src/ch03-03-how-functions-work.md b/src/ch03-03-how-functions-work.md index 6035378..987e945 100644 --- a/src/ch03-03-how-functions-work.md +++ b/src/ch03-03-how-functions-work.md @@ -1,8 +1,8 @@ ## 函数 -> [ch03-03-how-functions-work.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch03-03-how-functions-work.md) +> [ch03-03-how-functions-work.md](https://github.com/rust-lang/book/blob/master/src/ch03-03-how-functions-work.md) >
-> commit f949ff883628db8ed2f2f5f19e146ebf19ed6a6f +> commit a86c1d315789b3ca13b20d50ad5005c62bdd9e37 函数遍布于 Rust 代码中。你已经见过语言中最重要的函数之一:`main` 函数,它是很多程序的入口点。你也见过 `fn` 关键字,它用来声明新函数。 @@ -41,7 +41,7 @@ Another function. ### 函数参数 -函数也可以被定义为拥有 **参数**(*parameters*),参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(*arguments*),但是在闲谈时,人们倾向于互换着使用 *parameter* 和 *argument* 来表示函数定义中的变量或调用函数时传入的具体值。 +函数也可以被定义为拥有 **参数**(*parameters*),参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(*arguments*),但是在日常交流中,人们倾向于不区分使用 *parameter* 和 *argument* 来表示函数定义中的变量或调用函数时传入的具体值。 下面被重写的 `another_function` 版本展示了 Rust 中参数是什么样的: @@ -125,7 +125,7 @@ fn main() { 文件名: src/main.rs -```rust,ignore +```rust,ignore,does_not_compile fn main() { let x = (let y = 6); } @@ -231,7 +231,7 @@ fn plus_one(x: i32) -> i32 { 文件名: src/main.rs -```rust,ignore +```rust,ignore,does_not_compile fn main() { let x = plus_one(5); diff --git a/src/ch03-04-comments.md b/src/ch03-04-comments.md index 2aecde8..84bcd55 100644 --- a/src/ch03-04-comments.md +++ b/src/ch03-04-comments.md @@ -1,8 +1,8 @@ ## 注释 -> [ch03-04-comments.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch03-04-comments.md) +> [ch03-04-comments.md](https://github.com/rust-lang/book/blob/master/src/ch03-04-comments.md) >
-> commit f949ff883628db8ed2f2f5f19e146ebf19ed6a6f +> commit a86c1d315789b3ca13b20d50ad5005c62bdd9e37 所有程序员都力求使其代码易于理解,不过有时还需要提供额外的解释。在这种情况下,程序员在源码中留下记录,或者 **注释**(*comments*),编译器会忽略它们,不过阅读代码的人可能觉得有用。 diff --git a/src/ch03-05-control-flow.md b/src/ch03-05-control-flow.md index c0295d7..2494982 100644 --- a/src/ch03-05-control-flow.md +++ b/src/ch03-05-control-flow.md @@ -1,8 +1,8 @@ ## 控制流 -> [ch03-05-control-flow.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch03-05-control-flow.md) +> [ch03-05-control-flow.md](https://github.com/rust-lang/book/blob/master/src/ch03-05-control-flow.md) >
-> commit f949ff883628db8ed2f2f5f19e146ebf19ed6a6f +> commit a86c1d315789b3ca13b20d50ad5005c62bdd9e37 根据条件是否为真来决定是否执行某些代码,以及根据条件是否为真来重复运行一段代码是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是 `if` 表达式和循环。 @@ -62,7 +62,7 @@ condition was false 文件名: src/main.rs -```rust,ignore +```rust,ignore,does_not_compile fn main() { let number = 3; @@ -172,7 +172,7 @@ The value of number is: 5 文件名: src/main.rs -```rust,ignore +```rust,ignore,does_not_compile fn main() { let condition = true; @@ -246,6 +246,26 @@ again! 幸运的是,Rust 提供了另一种更可靠的退出循环的方式。可以使用 `break` 关键字来告诉程序何时停止循环。回忆一下在第二章猜猜看游戏的 “猜测正确后退出” 部分使用过它来在用户猜对数字赢得游戏后退出程序。 +#### 从循环返回 + +`loop` 的一个用例是重试可能会失败的操作,比如检查线程是否完成了任务。然而你可能会需要将操作的结果传递给其它的代码。如果将返回值加入你用来停止循环的 `break` 表达式,它会被停止的循环返回: + +```rust +fn main() { + let mut counter = 0; + + let result = loop { + counter += 1; + + if counter == 10 { + break counter * 2; + } + }; + + assert_eq!(result, 20); +} +``` + #### `while` 条件循环 在程序中计算循环的条件也很常见。当条件为真,执行循环。当条件不再为真,调用 `break` 停止循环。这个循环类型可以通过组合 `loop`、`if`、`else` 和 `break` 来实现;如果你喜欢的话,现在就可以在程序中试试。 @@ -270,7 +290,7 @@ fn main() { 示例 3-3: 当条件为真时,使用 `while` 循环运行代码 -这种结构消除了使用 `loop`、`if`、`else` 和 `break` 时必须有的很多嵌套,代码更加清晰。当条件为真就执行,否则退出循环。 +这种结构消除了很多使用 `loop`、`if`、`else` 和 `break` 时所必须的嵌套,这样更加清晰。当条件为真就执行,否则退出循环。 #### 使用 `for` 遍历集合 diff --git a/src/ch04-00-understanding-ownership.md b/src/ch04-00-understanding-ownership.md index d0045c9..327c43c 100644 --- a/src/ch04-00-understanding-ownership.md +++ b/src/ch04-00-understanding-ownership.md @@ -1,7 +1,7 @@ # 认识所有权 -> [ch04-00-understanding-ownership.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch04-00-understanding-ownership.md) +> [ch04-00-understanding-ownership.md](https://github.com/rust-lang/book/blob/master/src/ch04-00-understanding-ownership.md) >
-> commit aff4f619c4d6dc138b57b74c3a898ba9bce06649 +> commit 1fedfc4b96c2017f64ecfcf41a0a07e2e815f24f 所有权(系统)是 Rust 最独特的功能,其令 Rust 无需垃圾回收(garbage collector)即可保障内存安全。因此,理解 Rust 中所有权如何工作是十分重要的。本章,我们将讲到所有权以及相关功能:借用、slice 以及 Rust 如何在内存中布局数据。 \ No newline at end of file