|
|
|
@ -8,9 +8,9 @@ Rust 的 **闭包**(*closures*)是可以保存在一个变量中或作为参
|
|
|
|
|
|
|
|
|
|
### 闭包会捕获其环境
|
|
|
|
|
|
|
|
|
|
我们首先了解如何通过闭包捕获定义它的环境中的值以便之后使用。考虑如下场景:有时我们的 T恤公司会赠送一款昂贵的限量版 T恤给邮件列表中的成员作为促销。邮件列表中的成员可选将他们的喜爱的颜色添加到个人信息中。如果被选中的成员设置了喜爱的颜色,他们将获得那个颜色的 T恤。如果他没有设置喜爱的颜色,他们会获得任何公司现有最多的颜色的款式。
|
|
|
|
|
我们首先了解如何通过闭包捕获定义它的环境中的值以便之后使用。考虑如下场景:有时 T 恤公司会赠送限量版 T 恤给邮件列表中的成员作为促销。邮件列表中的成员可以选择将他们的喜爱的颜色添加到个人信息中。如果被选中的成员设置了喜爱的颜色,他们将获得那个颜色的 T 恤。如果他没有设置喜爱的颜色,他们会获赠公司现有最多的颜色的款式。
|
|
|
|
|
|
|
|
|
|
有很多种方式来实现这些。例如,使用有 `Red` 和 `Blue` 两个成员的 `ShirtColor` 枚举(出于简单考虑限定为两种颜色)。我们使用 `Inventory` 结构体来代表公司的库存,它有一个 `shirts` 字段包含一个 `Vec<ShirtColor>` 来代表库存中的衬衫的颜色。`Inventory` 上定义的 `giveaway` 方法获取一个可选的免费衬衫得主所喜爱的颜色,并返回其所将获得的颜色。初始代码如示例 13-1 所示:
|
|
|
|
|
有很多种方式来实现这些。例如,使用有 `Red` 和 `Blue` 两个成员的 `ShirtColor` 枚举(出于简单考虑限定为两种颜色)。我们使用 `Inventory` 结构体来代表公司的库存,它有一个类型为 `Vec<ShirtColor>` 的 `shirts` 字段表示库存中的衬衫的颜色。`Inventory` 上定义的 `giveaway` 方法获取免费衬衫得主所喜爱的颜色(如有),并返回其获得的衬衫的颜色。初始代码如示例 13-1 所示:
|
|
|
|
|
|
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
|
|
|
|
|
|