一:高阶函数: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
}
原文:https://www.cnblogs.com/lyr999736/p/11150144.html