Skip to content

Commit e65bc24

Browse files
committed
Re-make the Simplify Chinese Translation Scala Tour: For Comprehensions
1 parent bc7e867 commit e65bc24

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

_zh-cn/tour/for-comprehensions.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ next-page: generic-classes
1414
previous-page: extractor-objects
1515
---
1616

17-
Scala 提供一个轻量级的标记方式用来表示 *序列表达式*。表达式使用以下形式 `for (enumerators) yield e`,此处 `enumerators` 指一组以分号分隔的迭代器。一个 *enumerator* 要么是一个产生新变量的构造器,要么是一个过滤器。表达式在循环的每一次迭代中都会计算 `e` 值,并保存在集合中,循环结束后返回该集合
17+
Scala 提供一个轻量级的标记方式用来表示 *序列推导*。推导使用形式为 `for (enumerators) yield e` 的 for 表达式,此处 `enumerators` 指一组以分号分隔的枚举器。一个 *enumerator* 要么是一个产生新变量的生成器,要么是一个过滤器。for 表达式在枚举器产生的每一次绑定中都会计算 `e` 值,并在循环结束后返回这些值组成的序列
1818

1919
看下例:
2020

@@ -31,9 +31,9 @@ val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30)
3131
3232
twentySomethings.foreach(name => println(name)) // prints Travis Dennis
3333
```
34-
这里 `for` 循环后面使用的 `yield` 语句实际上会创建一个 `List`。因为当我们说 `yield user.name` 的时候,它实际上是一个 `List[String]``user <- userBase` 是循环迭代器`if (user.age >=20 && user.age < 30)` 是循环守卫用来过滤掉那些年龄不是20多岁的人
34+
这里 `for` 循环后面使用的 `yield` 语句实际上会创建一个 `List`。因为当我们说 `yield user.name` 的时候,它实际上是一个 `List[String]``user <- userBase` 是生成器`if (user.age >=20 && user.age < 30)` 是过滤器用来过滤掉那些年龄不是20多岁的人
3535

36-
下面这个例子复杂一些,使用了两个迭代器。它计算了 `0``n-1` 的所有两两求和为 `v` 的数字的组合:
36+
下面这个例子复杂一些,使用了两个生成器。它计算了 `0``n-1` 的所有两两求和为 `v` 的数字的组合:
3737

3838
```tut
3939
def foo(n: Int, v: Int) =
@@ -47,15 +47,15 @@ foo(10, 10) foreach {
4747
}
4848
4949
```
50-
这里 `n == 10``v == 10`。在第一次迭代时,`i == 0` 并且 `j == 0` 所以 `i + j != v` 因此没有返回值被生成。在 `i` 的值递增到 `1` 之前,`j` 的值又递增了 9 次。如果没有 `if` 守护语句,上面的例子只会打印出如下的结果:
50+
这里 `n == 10``v == 10`。在第一次迭代时,`i == 0` 并且 `j == 0` 所以 `i + j != v` 因此没有返回值被生成。在 `i` 的值递增到 `1` 之前,`j` 的值又递增了 9 次。如果没有 `if` 语句过滤,上面的例子只会打印出如下的结果:
5151
```
5252
5353
(0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5) (0, 6) (0, 7) (0, 8) (0, 9) (1, 1) ...
5454
```
5555

56-
注意表达式并不局限于使用列表。任何数据类型只要支持 `withFilter``map`,和 `flatMap` 操作(不同数据类型可能支持不同的操作)都可以用来做序列表达式
56+
注意 for 表达式并不局限于使用列表。任何数据类型只要支持 `withFilter``map`,和 `flatMap` 操作(不同数据类型可能支持不同的操作)都可以用来做序列推导
5757

58-
你可以在使用表达式时省略 `yield` 语句。此时表达式会返回 `Unit`。当你想要执行一些副作用的时候这很有用。下面的例子输出和上面相同的结果,但是没有使用 `yield`
58+
你可以在使用 for 表达式时省略 `yield` 语句。此时会返回 `Unit`。当你想要执行一些副作用的时候这很有用。下面的例子输出和上面相同的结果,但是没有使用 `yield`
5959

6060
```tut
6161
def foo(n: Int, v: Int) =

0 commit comments

Comments
 (0)