高阶函数
带函数参数的函数由于是一个接受函数参数的函数,故被称为高阶函数,像之前讲到的map()函数就是高阶函数。如下例所示:
上述代码中,apply函数接受一个函数f作为参数,接受一个Int类型的参数,进行f(v)运算,在下面又给出了f具体的定义(layout函数)。
同样的,高阶函数也可以产出另一个函数(即返回结果为一个函数,而不是某个值或对象),如下例所示:
这里函数rectangle的输出是一个计算矩形周长的函数,矩形长已固定。
在高阶函数中,经常将只需要执行一次的函数定义为匿名函数作为参数传递给高阶函数,就好像map()、filter()等高阶函数中经常能看到使用了匿名函数作为参数。匿名函数在这里有一个特性能够帮助我们写出更容易阅读的函数——参数推断。
正常情况下,我们使用匿名函数的方式如下:
即在map函数中定义匿名函数(a: Double) => a * 3,但是由于map函数知道你传入的是一个类型为(Double)=> Double类型的函数,故可以简化为下面的代码:
并且如果匿名函数只有一个参数,则可以省略(),继续简化:
在此基础上,如果参数在=>右边只出现了一次,则可以用_替换它: