一:高阶函数:1.函数作为参数 2.函数的返回值为参数
/** * @Author:Alex_lei * @Description: 高阶函数,将函数作为函数传入 */ object High_function { def main(args: Array[String]): Unit = { val l = List(1,2,3,4) println(getMax(l,g)) /** * 返回的fun1是函数,可以继续根据fun1的参数列表进行调用 */ val fun1 = returnfunc(true,"Ai") println(fun1("alex","Bye")) } /** * 函数作为参数传入函数 * @param l 列表 * @param g 函数 * @return */ def getMax(l:List[Int] ,g:Int => Int) = { l.map(g) } def g(x:Int):Int = { x+1 } /** * 返回函数 * @param flag 布尔值 * @param str 字符串 * @return 函数(s1:String,s2:String) => s3:String */ def returnfunc(flag:Boolean,str:String) :(String,String) => (String) = { var s = "" if(flag) s = "alex" else s = "Lily" (a:String,b:String) => str+" Hello world "+b } }
二:柯里化的函数
/** * @Author:Alex_lei * @Description: 柯里化函数 */ object Currie_function { def main(args: Array[String]): Unit = { val r1 = cal(1,2) println(r1) /** * 其实当调用currie_cal函数时,实际上接连调用了两个传统函数 * ,第一个调用的是单个a参数的,第二个是调用的是单个b参数的。 * 实现的就是下面的first和second函数 */ val r2 = currie_cal(1)(2) println(r2) val second = first(1) val r4 = second(2) println(r4) } /** * 传统的两个数相加 * @param a * @param b * @return */ def cal(a:Int,b:Int):Int = { a + b } /** * 柯里化的函数 * @param a * @param b * @return */ def currie_cal(a:Int)(b:Int) = a + b def first(a:Int) = (b:Int) => a + b }