Scala基础学习-高阶函数

夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。
夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能冶性。
年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及。
——诸葛亮《诫子书》
于文章中出现的任何错误请大家批评指出,一定及时修改
有任何想要讨论和学习的问题可联系我: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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HipiCloud

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值