@@ -14,17 +14,15 @@ next-page: nested-functions
14
14
previous-page : mixin-class-composition
15
15
---
16
16
17
- 高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。
18
- 这里的术语可能有点让人困惑:使用函数作为参数,或者返回值为函数的“函数”和“方法”,我们均称之为“高阶函数”。
17
+ 高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。这里的术语可能有点让人困惑:使用函数作为参数,或者返回值为函数的“函数”和“方法”,我们均称之为“高阶函数”。
19
18
20
- 最常见的一个例子是Scala中容器类(Collections )的高阶函数` map `
19
+ 最常见的一个例子是Scala集合类(collections )的高阶函数` map `
21
20
```
22
21
val salaries = Seq(20000, 70000, 40000)
23
22
val doubleSalary = (x: Int) => x * 2
24
23
val newSalaries = salaries.map(doubleSalary) // List(40000, 140000, 80000)
25
24
```
26
- 函数` doubleSalary ` 有一个整型参数` x ` ,返回` x * 2 ` 。一般来说,在` => ` 左边的元组是函数的参数列表,而右边表达式的值则为函数的返回值。
27
- 在第3行,函数` doubleSalary ` 被应用在列表` salaries ` 中的每一个元素。
25
+ 函数` doubleSalary ` 有一个整型参数` x ` ,返回` x * 2 ` 。一般来说,在` => ` 左边的元组是函数的参数列表,而右边表达式的值则为函数的返回值。在第3行,函数` doubleSalary ` 被应用在列表` salaries ` 中的每一个元素。
28
26
29
27
为了简化压缩代码,我们可以使用匿名函数,直接作为参数传递给` map ` :
30
28
```
@@ -48,9 +46,7 @@ case class WeeklyWeatherForecast(temperatures: Seq[Double]) {
48
46
def forecastInFahrenheit: Seq[Double] = temperatures.map(convertCtoF) // <-- passing the method convertCtoF
49
47
}
50
48
```
51
- 在这个例子中,方法` convertCtoF ` 被传入` forecastInFahrenheit ` 。
52
- 这是可以的,因为编译器强制将方法` convertCtoF ` 转成了函数` x => convertCtoF(x) `
53
- (注: ` x ` 是编译器生成的变量名,保证在其作用域是唯一的)。
49
+ 在这个例子中,方法` convertCtoF ` 被传入` forecastInFahrenheit ` 。这是可以的,因为编译器强制将方法` convertCtoF ` 转成了函数` x => convertCtoF(x) ` (注: ` x ` 是编译器生成的变量名,保证在其作用域是唯一的)。
54
50
55
51
## 接收函数作为参数的函数
56
52
使用高阶函数的一个原因是减少冗余的代码。比方说需要写几个方法以通过不同方式来提升员工工资,若不使用高阶函数,代码可能像这样:
@@ -106,5 +102,4 @@ val query = "id=1"
106
102
val url = getURL(endpoint, query) // "https://www.example.com/users?id=1": String
107
103
```
108
104
109
- 注意urlBuilder的返回类型是` (String, String) => String ` ,这意味着返回的匿名函数有两个String参数,返回一个String。
110
- 在这个例子中,返回的匿名函数是` (endpoint: String, query: String) => s"https://www.example.com/$endpoint?$query" ` 。
105
+ 注意urlBuilder的返回类型是` (String, String) => String ` ,这意味着返回的匿名函数有两个String参数,返回一个String。在这个例子中,返回的匿名函数是` (endpoint: String, query: String) => s"https://www.example.com/$endpoint?$query" ` 。
0 commit comments