高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。这里的术语可能有点让人困惑,我们约定,使用函数值作为参数,或者返回值为函数值的“函数”和“方法”,均称之为“高阶函数”。
最常见的一个例子是Scala集合类(collections)的高阶函数map
val salaries = Seq(20000, 70000, 40000)
val doubleSalary = (x: Int) => x * 2
val newSalaries = salaries.map(doubleSalary) // List(40000, 140000, 80000)
函数doubleSalary
有一个整型参数x
,返回x * 2
。一般来说,在=>
左边的元组是函数的参数列表,而右边表达式的值则为函数的返回值。在第3行,函数doubleSalary
被应用在列表salaries
中的每一个元素。
为了简化压缩代码,我们可以使用匿名函数,直接作为参数传递给map
:
val salaries = Seq(20000, 70000, 40000)
val newSalaries = salaries.map(x => x * 2) // List(40000, 140000, 80000)
注意在上述示例中x
没有被显式声明为Int类型,这是因为编译器能够根据map函数期望的类型推断出x
的类型。对于上述代码,一种更惯用的