(1)匿名函数
var triple = (x:Double)=> 3*x
这就跟你用def一样
def triple(x:Double) = 3*x
但你不需要给函数命名,你可以直接将它传递给另一个函数
Array(3.14,1.42,2.0).map((x:Double)=> 3*x)
(2)带函数参数的函数
def valueAtOneQuarter(f: (Double)=> Double) = f(0.25)
valueAtOneQuarter的类型是什么呢?她是一个带有单个参数的函数,因为他的类型写作:
(参数类型)=>结果类型
结果类型很显然是double,,而参数类型已经在函数头部以(Double)=>Double给出了,因此,ValueAtOneQuarter的类型为
((Double)->Double)=>Double
由于ValueAtOneQuearter是一个接受函数参数的函数,因此他被称作高阶函数。
高阶函数也可以产生出另一个函数,以下是一个简单实例:
def mulBy(Factor:Double)=(x:Double)=>factor*x
举例来说,mulBy(3)返回函数(x:Double)=>3*x,mul的威力在于,它可以产生出能够乘以任何数额的函数:
val quintuple = mulBy(5)
quintuple(20)
mulBy函数有一个类型为Double的参数,返回一个类型为(Double)=>Double的函数,因此,它的类型应该是:
(Double)=>((Double)=>Double)