文章永久连接:https://tech.souyunku.com/3021
高阶函数(Higher-Order Function)就是能够使用其他函数作为其参数,也能够返回函数作为返回值的的函数。
scala 中 函数是一等公民,和基本的数据类型一样,可以作为参数来传递。
Scala的特性之一就是支持高阶函数。
我们用几个范例来看看 scala 中的高阶函数用法。
函数作为参数
apply() 函数使用了另外一个函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v:
object Test {
def main(args: Array[String]) {
println( apply( layout, 10*10) )
}
// 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
def apply(f: Int => String, v: Int) = f(v)
def layout[A](x: A) = "[" + x.toString() + "]"
}
上面代码执行结果为:
[100]
函数作为返回值
高阶函数允许返回另一个函数。
object Test {
def main(args: Array[String]) {
val x = multiplyBy(8)
println( x(4))
}
def multiplyBy(factor:Double)=(x:Double)=>factor*x
}
运行结果为:
32、0
延伸阅读
高阶函数在 scala 中无处不在, 我们经常使用的 map 就是一个高阶函数
所有集合类型都存在 map 函数,例如 Array 的 map 函数的API具有如下形式:
def map[B](f: (A) ⇒ B): Array[B]
让我们用一个例子来看看 map 如何使用
下面所有的例子都是 得到: 3个重复的各自重复了 2 次的字符串
object Test {
def main(args: Array[String]) {
val mt = Array("spark","hive","hadoop").map((x:String)=>x*2)
println(mt.mkString(","))
}
}
执行结果如下:
sparkspark,hivehive,hadoophadoop
你还可以继续深入阅读:
- CSDN :
Scala入门到精通——第十三节 高阶函数
- CSDN :
Scala函数特性系列]——高阶函数
干货推荐
附录:Scala 教程:系列文章
- 一、Scala 教程: 教程
- 二、Scala 教程: 简介
- 三、Scala 教程: 安装
- 四、Scala 教程: 基础语法
- 五、Scala 教程: 数据类型
- 六、Scala 教程: 中文乱码解决
- 七、Scala 教程: 变量
- 八、Scala 教程: 访问修饰符
- 九、Scala 教程: 运算符
- 十、Scala 教程: if…else 语句
- 十一、Scala 教程: 循环
- 十二、Scala 教程: 函数
- 十三、Scala 教程: 闭包
- 十四、Scala 教程: 字符串
- 十五、Scala 教程: 数组
- 十六、Scala 教程: Collection
- 十七、Scala 教程: Iterator(迭代器)
- 十八、Scala 教程: 类和对象
- 十九、Scala 教程: Trait(特征)
- 二十、Scala 教程: 模式匹配
- 二十一、Scala 教程: 正则表达式
- 二十二、Scala 教程: 异常处理
- 二十三、Scala 教程: 提取器(Extractor)
- 二十四、Scala 教程: 文件 IO
- 二十五、Scala 教程: do…while 循环
- 二十六、Scala 教程: 函数 – 默认参数值
- 【当前读到】二十七、Scala 教程: 高阶函数
- 二十八、Scala 教程: 函数嵌套
- 二十九、Scala 教程: Map(映射)
- 三十、Scala 教程: 指定函数参数名
- 三十一、Scala 教程: 偏应用函数
- 三十二、Scala 教程: 匿名函数
- 三十三、Scala 教程: 元组
- 三十四、Scala 教程: 函数传名调用(call-by-name)
- 三十五、Scala 教程: 递归函数
- 三十六、Scala 教程: Set(集合)
- 三十七、Scala 教程: 函数柯里化(Currying)
- 三十八、Scala 教程: 函数 – 可变参数
- 三十九、Scala 教程: Option(选项)
- 四十、Scala 教程: do…while 循环
- 四十一、Scala 教程: while 循环
- 四十二、Scala 教程: List(列表)
- 四十三、Scala 教程: break 语句