mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 00:43:59 +08:00
update ch13-01 & add proofreading_prompt.md close #809
This commit is contained in:
parent
94994e5b45
commit
257b5ca44d
@ -13,6 +13,10 @@ PS:
|
||||
|
||||
[source]: https://github.com/rust-lang/book/tree/main/src
|
||||
|
||||
## 校对
|
||||
|
||||
部分翻译采用 ChatGPT 4o 进行翻译校对。提示词详见 [proofreading_prompt.md](proofreading_prompt.md)
|
||||
|
||||
## 静态页面构建与文档撰写
|
||||
|
||||
### 构建
|
||||
|
32
proofreading_prompt.md
Normal file
32
proofreading_prompt.md
Normal file
@ -0,0 +1,32 @@
|
||||
**任务说明:**
|
||||
|
||||
作为一名专业翻译,同时精通 Rust 编程语言,你的任务是对提供的英文原文进行校对,并确保中文翻译的准确性。
|
||||
|
||||
**要求:**
|
||||
|
||||
1. **格式保留**:在校对过程中,请尽量保持原有中文翻译的格式和结构。
|
||||
2. **术语保留**:对于中文翻译中出现的英文专业术语,不要进行翻译,直接保留原文。
|
||||
3. **校对标准**:在校对时,请依据英文原文对中文翻译进行全面检查,确保准确传达原文的含义。
|
||||
4. **专业性**:请尊重专业领域的翻译技巧,避免简单直译,而是根据上下文做出最适当的调整。
|
||||
|
||||
**输入:**
|
||||
|
||||
- 英文原文:
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
- 中文翻译:
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
**输出:**
|
||||
|
||||
- 中文翻译校对:
|
||||
|
||||
```
|
||||
|
||||
```
|
@ -4,13 +4,13 @@
|
||||
> <br>
|
||||
> commit a2cb72d3ad7584cc1ae3b85f715c877872f5e3ab
|
||||
|
||||
Rust 的 **闭包**(*closures*)是可以保存在一个变量中或作为参数传递给其他函数的匿名函数。可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获被定义时所在作用域中的值。我们将展示闭包的这些功能如何复用代码和自定义行为。
|
||||
Rust 的 **闭包**(*closures*)是可以保存在变量中或作为参数传递给其他函数的匿名函数。你可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获其被定义时所在作用域中的值。我们将展示这些闭包特性如何支持代码复用和行为定制。
|
||||
|
||||
### 闭包会捕获其环境
|
||||
|
||||
我们首先了解如何通过闭包捕获定义它的环境中的值以便之后使用。考虑如下场景:有时 T 恤公司会赠送限量版 T 恤给邮件列表中的成员作为促销。邮件列表中的成员可以选择将他们的喜爱的颜色添加到个人信息中。如果被选中的成员设置了喜爱的颜色,他们将获得那个颜色的 T 恤。如果他没有设置喜爱的颜色,他们会获赠公司现存最多的颜色的款式。
|
||||
我们首先了解如何通过闭包捕获定义它的环境中的值以便之后使用。考虑如下场景:我们的 T 恤公司偶尔会向邮件列表中的某位成员赠送一件限量版的独家 T 恤作为促销。邮件列表中的成员可以选择将他们的喜爱的颜色添加到个人信息中。如果被选中的成员设置了喜爱的颜色,他们将获得那个颜色的 T 恤。如果他没有设置喜爱的颜色,他们会获赠公司当前库存最多的颜色的款式。
|
||||
|
||||
有很多种方式来实现这些。例如,使用有 `Red` 和 `Blue` 两个成员的 `ShirtColor` 枚举(出于简单考虑限定为两种颜色)。我们使用 `Inventory` 结构体来代表公司的库存,它有一个类型为 `Vec<ShirtColor>` 的 `shirts` 字段表示库存中的衬衫的颜色。`Inventory` 上定义的 `giveaway` 方法获取免费衬衫得主所喜爱的颜色(如有),并返回其获得的衬衫的颜色。初始代码如示例 13-1 所示:
|
||||
有很多种方式来实现这一点。例如,使用有 `Red` 和 `Blue` 两个成员的 `ShirtColor` 枚举(出于简单考虑限定为两种颜色)。我们使用 `Inventory` 结构体来代表公司的库存,它有一个类型为 `Vec<ShirtColor>` 的 `shirts` 字段表示库存中的衬衫的颜色。`Inventory` 上定义的 `giveaway` 方法获取免费衬衫得主所喜爱的颜色(如有),并返回其获得的衬衫的颜色。初始代码如示例 13-1 所示:
|
||||
|
||||
<span class="filename">文件名:src/main.rs</span>
|
||||
|
||||
@ -139,13 +139,13 @@ let add_one_v4 = |x| x + 1 ;
|
||||
|
||||
### 将被捕获的值移出闭包和 `Fn` trait
|
||||
|
||||
一旦闭包捕获了定义它的环境中一个值的引用或者所有权(也就影响了什么会被移 _进_ 闭包,如有),闭包体中的代码定义了稍后在闭包计算时对引用或值如何操作(也就影响了什么会被移 _出_ 闭包,如有)。闭包体可以做以下任何事:将一个捕获的值移出闭包,修改捕获的值,既不移动也不修改值,或者一开始就不从环境中捕获值。
|
||||
一旦闭包捕获了定义它的环境中的某个值的引用或所有权(也就影响了什么会被移 _进_ 闭包,如有),闭包体中的代码则决定了在稍后执行闭包时,这些引用或值将如何处理(也就影响了什么会被移 _出_ 闭包,如有)。闭包体可以执行以下任一操作:将一个捕获的值移出闭包,修改捕获的值,既不移动也不修改值,或者一开始就不从环境中捕获任何值。
|
||||
|
||||
闭包捕获和处理环境中的值的方式影响闭包实现的 trait。Trait 是函数和结构体指定它们能用的闭包的类型的方式。取决于闭包体如何处理值,闭包自动、渐进地实现一个、两个或三个 `Fn` trait。
|
||||
闭包捕获和处理环境中的值的方式会影响闭包实现哪些 trait,而 trait 是函数和结构体指定它们可以使用哪些类型闭包的方式。根据闭包体如何处理这些值,闭包会自动、渐进地实现一个、两个或全部三个 `Fn` trait。
|
||||
|
||||
1. `FnOnce` 适用于能被调用一次的闭包,所有闭包都至少实现了这个 trait,因为所有闭包都能被调用。一个会将捕获的值移入闭包体的闭包只实现 `FnOnce` trait,这是因为它只能被调用一次。
|
||||
2. `FnMut` 适用于不会将捕获的值移入闭包体的闭包,但它可能会修改被捕获的值。这类闭包可以被调用多次。
|
||||
3. `Fn` 适用于既不将被捕获的值移入闭包体也不修改被捕获的值的闭包,当然也包括不从环境中捕获值的闭包。这类闭包可以被调用多次而不改变它们的环境,这在会多次并发调用闭包的场景中十分重要。
|
||||
1. `FnOnce` 适用于只能被调用一次的闭包。所有闭包至少都实现了这个 trait,因为所有闭包都能被调用。一个会将捕获的值从闭包体中移出的闭包只会实现 `FnOnce` trait,而不会实现其他 `Fn` 相关的 trait,因为它只能被调用一次。
|
||||
2. `FnMut` 适用于不会将捕获的值移出闭包体,但可能会修改捕获值的闭包。这类闭包可以被调用多次。
|
||||
3. `Fn` 适用于既不将捕获的值移出闭包体,也不修改捕获值的闭包,同时也包括不从环境中捕获任何值的闭包。这类闭包可以被多次调用而不会改变其环境,这在会多次并发调用闭包的场景中十分重要。
|
||||
|
||||
让我们来看示例 13-1 中使用的在 `Option<T>` 上的 `unwrap_or_else` 方法的定义:
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
## 中英文对照
|
||||
|
||||
- high-level: 高层
|
||||
- low-level: 底层
|
Loading…
Reference in New Issue
Block a user