From d8c7a75c12e8d16a1b57dde69f73786fcfe67ce2 Mon Sep 17 00:00:00 2001 From: icey-self Date: Thu, 25 Jul 2019 15:59:04 +0800 Subject: [PATCH 1/3] Box --> Box --- src/ch12-03-improving-error-handling-and-modularity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch12-03-improving-error-handling-and-modularity.md b/src/ch12-03-improving-error-handling-and-modularity.md index 27bd0a1..2802956 100644 --- a/src/ch12-03-improving-error-handling-and-modularity.md +++ b/src/ch12-03-improving-error-handling-and-modularity.md @@ -328,7 +328,7 @@ fn run(config: Config) -> Result<(), Box> { 示例 12-12:修改 `run` 函数返回 `Result` -这里我们做出了三个明显的修改。首先,将 `run` 函数的返回类型变为 `Result<(), Box>`。之前这个函数返回 unit 类型 `()`,现在它仍然保持作为 `Ok` 时的返回值。 +这里我们做出了三个明显的修改。首先,将 `run` 函数的返回类型变为 `Result<(), Box>`。之前这个函数返回 unit 类型 `()`,现在它仍然保持作为 `Ok` 时的返回值。 对于错误类型,使用了 **trait 对象** `Box`(在开头使用了 `use` 语句将 `std::error::Error` 引入作用域)。第十七章会涉及 trait 对象。目前只需知道 `Box` 意味着函数会返回实现了 `Error` trait 的类型,不过无需指定具体将会返回的值的类型。这提供了在不同的错误场景可能有不同类型的错误返回值的灵活性。这也就是 `dyn`,它是 “动态的”(“dynamic”)的缩写。 From 54966f0ff16883ec00abe107922bfb79db8a5d27 Mon Sep 17 00:00:00 2001 From: iczc Date: Fri, 2 Aug 2019 10:27:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=99=A8=E4=B8=BA=E7=BC=96=E8=AF=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch01-02-hello-world.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch01-02-hello-world.md b/src/ch01-02-hello-world.md index 482afe3..f7aebf8 100644 --- a/src/ch01-02-hello-world.md +++ b/src/ch01-02-hello-world.md @@ -111,7 +111,7 @@ fn main() { 你刚刚运行了一个新创建的程序,那么让我们检查此过程中的每一个步骤。 -在运行 Rust 程序之前,必须先使用 Rust 编辑器编译它,即输入 `rustc` 命令并传入源文件名称,如下: +在运行 Rust 程序之前,必须先使用 Rust 编译器编译它,即输入 `rustc` 命令并传入源文件名称,如下: ```text $ rustc main.rs From f5fac8fea0efb512993fcdb3bbb688a4b39bc572 Mon Sep 17 00:00:00 2001 From: icey-self Date: Fri, 2 Aug 2019 14:24:22 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3typo=20=E5=A4=9A=E6=9C=89?= =?UTF-8?q?=20-->=20=E6=89=80=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 英文原文:Subclasses shouldn’t always share all characteristics of their parent class but will do so with inheritance. --- src/ch17-01-what-is-oo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch17-01-what-is-oo.md b/src/ch17-01-what-is-oo.md index bb8a67d..00d0526 100644 --- a/src/ch17-01-what-is-oo.md +++ b/src/ch17-01-what-is-oo.md @@ -97,6 +97,6 @@ impl AveragedCollection { > 很多人将多态描述为继承的同义词。不过它是一个有关可以用于多种类型的代码的更广泛的概念。对于继承来说,这些类型通常是子类。 > Rust 则通过泛型来使得对多个不同类型的抽象成为可能,并通过 trait bounds 加强对这些类型所必须提供的内容的限制。这有时被称为 *bounded parametric polymorphism*。 -近来继承作为一种语言设计的解决方案在很多语言中失宠了,因为其时常带有共享多于所需的代码的风险。子类不应总是共享其父类的多有特征,但是继承却始终如此。如此会使程序设计更为不灵活,并引入无意义的子类方法调用,或由于方法实际并不适用于子类而造成错误的可能性。某些语言还只允许子类继承一个父类,进一步限制了程序设计的灵活性。 +近来继承作为一种语言设计的解决方案在很多语言中失宠了,因为其时常带有共享多于所需的代码的风险。子类不应总是共享其父类的所有特征,但是继承却始终如此。如此会使程序设计更为不灵活,并引入无意义的子类方法调用,或由于方法实际并不适用于子类而造成错误的可能性。某些语言还只允许子类继承一个父类,进一步限制了程序设计的灵活性。 因为这些原因,Rust 选择了一个不同的途径,使用 trait 对象替代继承。让我们看一下 Rust 中的 trait 对象是如何实现多态的。