Scala学习笔记三高阶函数
**
摘要:
**
去年开发的过程中使用过Kafka,了解到Kafka是用Scala编写的,今年在开发过程中,使用了spark,spark也是使用Scala编写的,并且在项目中使用了Scala开发,只是对Scala缺乏一个系统的学习,所以花了一个多月的时间看完了《快学Scala》,看完之后本来想写点摘要笔记,过程当中顺带看了慕课网Scala程序设计—基础篇,发现慕课网的基础讲解挺不错的,所以就把慕课网的讲解结合了个人的理解记录下来,慕课网的基础篇确实讲解的是基础,建议大家抽空看一下《快学Scala》,书本把原理的东西,以及Scala的很多概念讲解得更加详细
**
一.高阶函数
**
1.函数是第一等公民
Scala语言支持:把函数作为实参传递给另外一个函数,把函数作为返回值,
把函数赋值给变量,把函数存储在数据结构里
在Scala中,函数就像普通变量一样,同样也具有函数的类型
2.函数类型
在Scala中,函数类型的格式为 A =>B,表示一个接受类型A的参数,并返回类型B的函数
例子:
Int => String 是把整形映射为字符串的函数类型
3.高阶函数
用函数作为形参或返回值的函数,称为高阶函数换句话说函数的参数是函数,或者函数的返回值是函数,或者两者都有
例子:
def operator(f:(Int,Int)=>Int)={ // 函数的参数是函数
f(4,4)
}
def greeting() = (name:String) => {“hello” + " " + name}
//函数的返回值是函数,这里返回的是是匿名函数
4.匿名函数
匿名函数(Anonymous Function),就是函数常量,也称为函数文字量(Function Literal)
,换句话说就是没有函数头部分的变量,在Scala 里,匿名函数的定义格式为
(形参列表) = > {函数体}
例子: (x:Int,y:Int)=> x+y
5.柯里化
柯里化函数(Curried Function)把具有多个函数的参数转换为一条函数链,每个节点上是单一函数。换句话说就是把多个参数转换成单个参数,把多个参数单个的拿出来,放进括号里面,串接起来
def add(x:Int,y:Int)=x+y
def add(x:Int)(y:Int)=x+y //scala柯里化的语法
例子:def curiedAdd(a:Int)(b:Int) = a + b
curriedAdd(2)(2)//4
val addOne = curriedAdd(1)_ //Int = > Int
//这里将curriedAdd(a:Int)(b:Int) 变成了curriedAdd(1)(b:Int) 返回给addOne ,
//即addOne =curriedAdd(1)(b:Int)=1 + b
addOne(2) //3 ,传值b=2进addOne
6.递归函数
递归函数(Recursive Function)在函数式编程中是实现循环的一种技术
例子:计算n!
def factorial(n:Int) : Int=
if(n<=0) 1
else nfactorial(n-1)
为了解决递归中可能会出现的堆栈溢出,进行优化,出现了以下:
尾递归函数(tail Recursive Function)中所有递归形式的调用都出现在函数的末尾
当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。
尾递归实现n!
@annotation.tailrec
def function(n:Int,m:Int):Int =
if(n<=0) m
else factotial(n-1,mn)
调用factorial(5,1)
- Scala 学习笔记(一)------函数传名调用(call-by-name)
- Scala学习笔记-方法和函数
- scala学习笔记之函数
- Scala学习笔记(四) - 变量,常量,函数及类的定义
- Scala学习笔记07【For、Scala函数进阶】
- Scala学习笔记(二)表达式和函数
- Scala学习笔记17【Scala偏函数】
- scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归
- Scala学习笔记(四) - 变量,常量,函数及类的定义
- Scala 学习笔记(五)------定义函数指定默认参数
- scala学习笔记一_函数function
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- 快学Scala学习笔记及习题解答(1-4基础、控制、函数、数组、元组和映射)
- Scala学习笔记(三)—— 方法和函数
- Scala入门(一),基础函数学习笔记
- Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦
- Scala2.11.7学习笔记(二)函数定义
- Scala学习笔记--第3章 函数
- scala 学习笔记二 方法与函数
- Scala学习笔记-控制结构和函数(2)