前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala基础——高阶函数

Scala基础——高阶函数

作者头像
羊羽shine
发布2019-08-09 15:26:07
3820
发布2019-08-09 15:26:07
举报
文章被收录于专栏:Golang开发

函数字面量

在非函数式编程语言里,函数的定义包含了“函数类型”和“值”两种层面的内容。但是,在函数式编程中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作,也就是说,函数的使用方式和其他数据类型的使用方式完全一致了。这时,我们就可以像定义变量那样去定义一个函数,由此导致的结果是,函数也会和其他变量一样,开始有“值”。就像变量的“类型”和“值”是分开的两个概念一样,函数式编程中,函数的“类型”和“值”也成为两个分开的概念,函数的“值”,就是“函数字面量”。 整数字面量

代码语言:javascript
复制
scala> val i = 1
i: Int = 1

浮点数字面量

代码语言:javascript
复制
scala> val f = 3.1415
f: Double = 3.1415

布尔型字面量

代码语言:javascript
复制
scala> val b = true
b: Boolean = tru

字符字面量

代码语言:javascript
复制
scala> val c = 'A'
c: Char = A

字符串字面量

代码语言:javascript
复制
scala> val s ="hello world"
s: String = hello world

匿名函数

不需要给每个函数命名,可以使用匿名函数,匿名函数的定义形式,称为“Lambda表达式”。“Lambda表达式”的形式如下:

代码语言:javascript
复制
(参数) => 表达式 //如果参数只有一个,参数的圆括号可以省略
(num: Int) => num +1

把匿名函数存放到变量中,addFunc是计算2个数的和,下面是在Scala解释器中的执行过程:

代码语言:javascript
复制
scala> val addFunc = (a:Int,b:Int) => a+b
addFunc: (Int, Int) => Int = $$Lambda$1052/1403539444@7ce85af2
scala> println(addFunc(1,2))
3

高阶函数

一个接受其他函数作为参数或者返回一个函数的函数就是高阶函数。

占位符语法

使用下划线作为一个或多个参数的占位符,只要每个参数在函数字面量内仅出现一次。

代码语言:javascript
复制
scala> val list = List(1,2,3,4,5)
list: List[Int] = List(1, 2, 3, 4, 5)

scala> list.filter(x => x>3)
res2: List[Int] = List(4, 5)

scala> list.filter(_ > 3)
res3: List[Int] = List(4, 5)

x => x>3和_ > 3是等价的,当采用下划线的表示方法时,对于列表list中的每个元素,都会依次传入用来替换下划线,首先传入1,然后判断1>3是否成立,如果成立,就把该值放入结果集合,如果不成立,则舍弃,接着再传入2,然后判断2>3是否成立,依此类推。最终符合结构的就是4和5了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数字面量
  • 匿名函数
  • 高阶函数
  • 占位符语法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档