能够接受函数作为参数的函数,叫做高阶函数。
1、高阶函数的使用一
def highOrderFunction1(f: Double => Double) = f(10)
def minus7(x: Double) = x - 7
val result2 = highOrderFunction1(minus7)
println(result2)
2、高阶函数的使用二
def highFunction(x:Int,y:Int,f:(Int,Int)=>Double) = f(x,y)
def subF(a:Int,b:Int):Double={
a*b
}
println(highFunction(2,3,subF))
3、函数(名)参数解析
//f: => Double 表示 这个f函数不接受任何参数,并返回一个Double类型的值
//f: Int => Double 表示 这个f函数接受一个Int类型的参数,并返回一个Double类型的值
//f: (Int,String) => Double 表示 这个f函数接受两个参数,一个Int类型的参数,一个String类型的参数,并返回一个Double类型的值
4、柯里化 + 闭包 + 返回函数类型
高阶函数同样可以返回函数类型
函数柯里化,高阶函数可以返回函数类型 ,函数同样可以作为返回类型,这叫做函数的柯里化,一个函数本来能够接收两个参数的,把它切分一下,变成两个函数,每个函数接收一个参数,这就是柯里化,柯里化(Haskell Curry)不是为了设计scala 而产生的一个概念,而是在设计scala 函数式编程中必然的产物,函数是一个对象,可以当做另一个函数的返回值
闭包
闭包就是,里面的函数使用外面函数的参数,叫做闭包
def m1(x:Int) = (y:Int) => x-y
println(m1(10))
println(m1(10)(3))
val function1 = m1(10)
val i6 = function1(3)
println("i6------- "+i6)