diff --git a/src/ch17-03-more-futures.md b/src/ch17-03-more-futures.md
index 05ddbc2..d9539f1 100644
--- a/src/ch17-03-more-futures.md
+++ b/src/ch17-03-more-futures.md
@@ -78,7 +78,7 @@ error[E0308]: mismatched types
为了使代码能够正常工作,我们需要使用 *trait objects*,正如我们在第十二章的 [“从 `run` 函数中返回错误”][dyn] 中做的那样。(第十八章会详细介绍 trait objects。)使用 trait objects 允许我们将这些类型所产生的不同的匿名 future 视为相同的类型,因为它们都实现了 `Future` trait。
-> 注意:在第八章中,我们讨论过另一种将多种类型包含进一个 `Vec` 的方式:使用一个枚举来代表每个可以出现在向量中的不同类型。不过这里我们不能这么做。首先,没有方法来命名这些不同的类型,因为它们是匿名的。其次,我们最开始采用向量和 `join_all` 的原因是为了处理一个直到运行时之前都不知道是什么的 future 的动态集合。
+> 注意:在第八章中,我们讨论过另一种将多种类型包含进一个 `Vec` 的方式:使用一个枚举来代表每个可以出现在向量中的不同类型。不过这里我们不能这么做。一方面,没有方法来命名这些不同的类型,因为它们是匿名的。另一方面,我们最开始采用向量和 `join_all` 的原因是为了处理一个直到运行时之前都不知道是什么的 future 的动态集合。
我们以将 `vec!` 中的每个 future 用 `Box::new` 封装来作为开始,如示例 17-16 所示。
@@ -94,7 +94,7 @@ error[E0308]: mismatched types
-不幸的是,代码仍然不能编译。事实上,这里犯了与之前相同的基本错误,不过我们会在第二个和第三个 `Box::new` 调用处得到两个错误,而且还会得到一个提及 `Unpin` trait 的新错误。我们一会再回到 `Unpin` 错误上。首先,让我们通过显式指定 `futures` 的类型来修复 `Box::new` 调用的类型错误:
+不幸的是,代码仍然不能编译。事实上,我们遇到了与之前相同的基本错误,不过这次我们会在第二个和第三个 `Box::new` 调用处各得到一个错误,同时还会得到一个提及 `Unpin` trait 的新错误。我们一会再回到 `Unpin` 错误上。首先,让我们通过显式标注 `futures` 的类型来修复 `Box::new` 调用的类型错误:
-这里必须编写的类型有一点复杂,让我们整体过一遍:
+这里必须编写的类型有一点复杂,让我们逐步过一遍:
-- 最内层的类型是 future 本身。
+- 最内层的类型是 future 本身。我们显式地指出 future 的输出类型是单元类型 `()`,其编写为 `Future