夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。
夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能冶性。
年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及。
——诸葛亮《诫子书》
于文章中出现的任何错误请大家批评指出,一定及时修改
有任何想要讨论和学习的问题可联系我:yangmq@aliyun.com
Scala基础学习-高阶函数
Scalable编程语言
面向对象语言
函数式语言
无缝的java互操作
一、Scala函数
- 函数是第一等公民
- Scala语言支持
把函数作为实参传递给另外一个函数
把函数作为返回值
把函数赋值给变量
把函数存储在数据结构里 - 在Scala中,函数就像普通变量一样,同样也具有函数的类型
函数类型的格式为A => B
,表示一个接受类型A
的参数,并返回类型B
的函数
例子:Int => String
是把整型映射为字符串的函数类型 - 高阶函数
用函数作为形参或返回值的函数,称为高阶函数
def operate(f:(Int,Int) => Int) = { f(4,4) }
def greeting() = (name: String) => { "hello" + " " + name }
- 匿名函数
匿名函数(Anonymous Function),就是函数常量,也称为函数文字量(Function Literal)
匿名函数的定义格式为:(形参列表) => {函数体}
二、柯里化
柯里化函数(Curried Function)把具有多个参数的函数转换为一条函数链,每个节点上是单一参数。
例子:以下两个add函数定义是等价的
def add(x:Int,y:Int) = x + y
def add(x:Int)(y:Int) = x + y //Scala柯里化的语法
三、递归函数
递归函数(Recursive Function)在函数式编程中是实现循环的一种技术。
例子:计算n!
def factorial(n:Int): Int =
if(n <= 0) 1
else n * factorial(n -1)
- 尾递归函数
尾递归函数(Tail Recursive Function)中所有递归形式的调用都出现在函数的末尾
当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是去栈中去创建一个新的。
//注解:告诉scala要进行尾递归优化
@annotation.tailrec
def factorial(n:Int,m:Int): Int =
if (n <= 0) m
else factorial(n - 1,m * n)
factorial(5,1)