能够接受函数作为参数的函数,叫做高阶函数(higher-order function)。可使应用程序更加健壮
1.作为参数的函数(高阶函数引入)
def plus(x: Int) = 3 + x
//说明
val result = Array(1, 2, 3, 4).map(plus(_))
println(result.mkString(",")) //4,5,6,7
//说明
//1. 在scala中,函数也是有类型,比如plus就是 <function1>
println("puls的函数类型function1" + (plus _))
2.高阶函数基本使用
def test(f: Double => Double, f2: Double => Int, n1: Double) = {
f(f2(n1)) // f(0)
}
//sum 是接收一个Double,返回一个Double
def sum(d: Double): Double = {
d + d
}
def mod(d: Double): Int = {
d.toInt % 2
}
val res = test(sum, mod, 5.0) //
println("res=" + res) // 2.0
}
3.返回函数类型的高阶函数
def minusxy(x: Int) = {
(y: Int) => x - y //匿名函数
}
//分步执行
//f1 就是 (y: Int) => 3 - y
val f1 = minusxy(3)
println("f1的类型=" + f1)
println(f1(1)) // 2
println(f1(9)) // -6
4.参数(类型)推断
参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以进行相应的简写。
参数类型是可以推断时,可以省略参数类型。
当传入的函数,只有单个参数时,可以省去括号。
如果变量只在=>右边只出现一次,可以用_来代替。
val list = List(1, 2, 3, 4)
println(list.map((x: Int) => x + 1)) //(2,3,4,5)
println(list.map((x) => x + 1)) //(2,3,4,5)
println(list.map(x => x + 1)) //(2,3,4,5)
println(list.map(_ + 1)) //(2,3,4,5)
println(list.reduce(f1)) // 10
println(list.reduce((n1: Int, n2: Int) => n1 + n2)) //10
println(list.reduce((n1, n2) => n1 + n2)) //10
println(list.reduce(_ + _)) //10
val res = list.reduce(_ + _)
————Blueicex 2020/2/17 10:10 blueice1980@126.com