From d79ad5ffb3a67b7324d046f48f21d69ad9b0007f Mon Sep 17 00:00:00 2001 From: Vincent Song Date: Mon, 10 Apr 2017 18:15:54 +1000 Subject: [PATCH 1/4] fix CH05-01 L146 --- src/ch05-01-method-syntax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch05-01-method-syntax.md b/src/ch05-01-method-syntax.md index 79a1f0a..3cfc72d 100644 --- a/src/ch05-01-method-syntax.md +++ b/src/ch05-01-method-syntax.md @@ -143,7 +143,7 @@ impl Rectangle { `impl`块的另一个好用的功能是:允许在`impl`块中定义**不**以`self`作为参数的函数。这被称为**关联函数**(*associated functions*),因为他们与结构体相关联。即便如此他们也是函数而不是方法,因为他们并不作用于一个结构体的实例。你已经使用过一个关联函数了:`String::from`。 -关联函数经常被用作返回一个结构体新实例的构造函数。例如我们可以一个关联函数,它获取一个维度参数并且用来作为长宽,这样可以更轻松的创建一个正方形`Rectangle`而不必指定两次同样的值: +关联函数经常被用作返回一个结构体新实例的构造函数。例如我们可以提供一个关联函数,它接受一个维度参数并且用来作为长和宽,这样可以更轻松的创建一个正方形`Rectangle`而不必指定两次同样的值: Filename: src/main.rs From 7cedf527333ffb1f20969324110ba4660cc8f02c Mon Sep 17 00:00:00 2001 From: Vincent Song Date: Mon, 10 Apr 2017 18:28:59 +1000 Subject: [PATCH 2/4] fixed CH06-01 L125 --- src/ch06-01-defining-an-enum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch06-01-defining-an-enum.md b/src/ch06-01-defining-an-enum.md index 18fd7d0..8668efa 100644 --- a/src/ch06-01-defining-an-enum.md +++ b/src/ch06-01-defining-an-enum.md @@ -122,7 +122,7 @@ let home = IpAddr::V4(127, 0, 0, 1); let loopback = IpAddr::V6(String::from("::1")); ``` -这些代码展示了使用枚举来储存两种不同 IP 地址的几种可能的选择。然而,事实证明储存和编码 IP 地址实在是太常见了[以致标准库提供了一个可供使用的定义!][IpAddr]让我们看看标准库如何定义`IpAddr`的:它正有着跟我们定义和使用的一样的枚举和成员,不过它将成员种的地址数据嵌入到了两个不同形式的结构体中,他们对不同的成员的定义是不同的: +这些代码展示了使用枚举来储存两种不同 IP 地址的几种可能的选择。然而,事实证明储存和编码 IP 地址实在是太常见了[以致标准库提供了一个可供使用的定义!][IpAddr]让我们看看标准库如何定义`IpAddr`的:它正有着跟我们定义和使用的一样的枚举和成员,不过它将成员中的地址数据嵌入到了两个不同形式的结构体中,他们对不同的成员的定义是不同的: [IpAddr]: ../std/net/enum.IpAddr.html From 4fa1e7ca3af74683a3bb157fa005d44b7ada5446 Mon Sep 17 00:00:00 2001 From: Vincent Song Date: Mon, 10 Apr 2017 18:34:12 +1000 Subject: [PATCH 3/4] fixed CH06-01 L225 --- src/ch06-01-defining-an-enum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch06-01-defining-an-enum.md b/src/ch06-01-defining-an-enum.md index 8668efa..8058f90 100644 --- a/src/ch06-01-defining-an-enum.md +++ b/src/ch06-01-defining-an-enum.md @@ -222,7 +222,7 @@ m.call(); > 我称之为我万亿美元的错误。当时,我在在一个面向对象语言设计第一个综合性的面向引用的类型系统。我的目标是通过编译器的自动检查来保证所有引用的应有都应该是绝对安全的。不过我未能抗拒引入一个空引用的诱惑,仅仅是因为它是这么的容易实现。这引发了无数错误、漏洞和系统崩溃,在之后的四十多年中造成了数以万计美元的苦痛和伤害。 -空值的为题在于当你尝试像一个非空值那样使用一个空值,会出现某种形式的错误。因为空和非空的属性是无处不在的,非常容易出现这类错误。 +空值的问题在于当你尝试像一个非空值那样使用一个空值,会出现某种形式的错误。因为空和非空的属性是无处不在的,非常容易出现这类错误。 然而,空值尝试表达的概念仍然是有意义的:空值是一个因为某种原因目前无效或缺失的值。 From a31ffac14d377fc5b4329ffdb70465708185fc7b Mon Sep 17 00:00:00 2001 From: Vincent Song Date: Mon, 10 Apr 2017 18:41:33 +1000 Subject: [PATCH 4/4] fixed CH06-02 L09 --- src/ch06-02-match.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch06-02-match.md b/src/ch06-02-match.md index d739cbd..aa51e19 100644 --- a/src/ch06-02-match.md +++ b/src/ch06-02-match.md @@ -6,7 +6,7 @@ Rust 有一个叫做`match`的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较并根据匹配的模式执行代码。模式可由字面值、变量、通配符和许多其他内容构成;第十八章会讲到所有不同种类的模式以及他们的作用。`match`的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。 -把`match`表达式想象成某种硬币分啦机:硬币滑入有着不同大小孔洞的轨道,每一个硬币都会掉入符合它大小的孔洞。同样地,值也会检查`match`的每一个模式,并且在遇到第一个“符合”的模式时,值会进入相关联的代码块并在执行中被使用。 +把`match`表达式想象成某种硬币筛选机器:硬币滑入有着不同大小孔洞的轨道,每一个硬币都会掉入符合它大小的孔洞。同样地,值也会检查`match`的每一个模式,并且在遇到第一个“符合”的模式时,值会进入相关联的代码块并在执行中被使用。 因为刚刚提到了硬币,让我们用他们来作为一个使用`match`的例子!我们可以编写一个函数来获取一个未知的(美国)硬币,并以一种类似验钞机的方式,确定它是何种硬币并返回它的美分值,如列表 6-3 中所示: