1,高阶函数
Scala支持:
1,函数是第一等公民
1,把函数做为实参传递给另外一个函数
2,把函数作为返回值返回
3,把函数赋值给变量
4,把函数存储在数据结构中
在Scala中,函数就像普通变量一样,同样也具有函数的类型。
2,函数类型
函数类型的格式为A => B,表示一个接受类型A的参数,并返回类型B的函数
例:Int => String 是把整型映射为字符串的函数类型
3,高阶函数
用函数作为形参或者返回值的函数,称为高阶函数。
例如:
4,匿名函数
匿名函数就是函数常量,也称为函数文字量,定义格式为
(形参列表)=> {函数体}
5,柯里化
柯里化函数把具有多个参数的函数转化为一条函数链,每个节点上是单一参数。
例子:以下两个add函数是等价的
Def add(x: Int, y:Int)=x+y
Def add(x: Int,)( y:Int)=x+y //scala里柯里化的语法
应用例子:
可以看到,在函数式编程中,我们可以基于一些通用性的函数,利用偏应用函数柯里化这些技术来定义构造新的函数,而不需要重新构造定义一些新的函数出来,这就是函数式编程的魅力所在。
6,Scala递归与尾递归
1,递归函数
递归函数在函数式编程中是实现循环的一种技术(函数式编程没有循环语句,通过递归实现)。
例子:
递归层数深会导致堆栈溢出,可对递归进行优化,即尾递归。
7,尾归递
尾递归函数中所有递归形式的调用都出现在函数的末尾。
当编译器检测到一个函数调用是尾递归时,它就覆盖当前的活动记录而不是在栈中去创建一个新的。可避免堆栈溢出。
8,综合性例子求