Coursera Scala 2-1:高阶函数

简介: <div style="line-height:1.6; orphans:2; widows:2; font-size:14px; font-family:'Helvetica Neue',Arial,'Hiragino Sans GB',STHeiti,SimSun,'WenQuanYi Micro Hei','Microsoft YaHei',sans-serif"> <h2 sty

把函数当做参数,传递给函数(好绕-..-),称为高阶函数。
高阶函数使我们的代码保持DRY(Dont't Repeat Yourself)

举个例子

一个返回所有扩展名为".scala"的文件的方法:

def filesHere = (new java.io.File(".")).listFiles

def filesEnding(query: String) =
for (file <- filesHere; if file.getName.endsWith(query))
yield file
}

如果我们需要一个方法,返回所有包含特定关键字的文件:

def filesContaining(query: String) =
for (file <- filesHere; if file.getName.contains(query))
yield file

如果我们又需要一个方法,返回所有匹配通配符的文件:

def filesRegex(query: String) =
for (file <- filesHere; if file.getName.matches(query))
yield file

很明显,这里有很多重复的代码。使用高阶函数,我们将对文件名处理的地方用传递进来的函数处理:

def filesMatching(query: String,
matcher: (String, String) => Boolean) = {
for (file <- filesHere; if matcher(file.getName, query))
yield file
}

使用闭包(包含自由变量,函数文本参数没有该变量,但是函数文本内有该变量,通过捕获得到。称为闭包)和占位符进一步简化代码:

private def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName))
yield file
def filesEnding(query: String) =
filesMatching(_.endsWith(query))
def filesContaining(query: String) =
filesMatching(_.contains(query))
def filesRegex(query: String) =
filesMatching(_.matches(query))

Reference

Scala编程第9章,控制抽象



目录
相关文章
|
2月前
|
Scala 开发者
Scala中的模式匹配与高阶函数:探索强大的编程范式
【7月更文挑战第11天】Scala中的模式匹配和高阶函数是两种极其强大的特性,它们不仅提升了代码的表达力和可读性,还使得开发者能够编写出更加灵活和可重用的解决方案。通过
|
4月前
|
SQL 分布式计算 编译器
Scala:高阶函数、隐式转换(四)
Scala:高阶函数、隐式转换(四)
43 0
|
10月前
|
Scala
172 Scala 高阶函数例子
172 Scala 高阶函数例子
27 0
|
10月前
|
算法 Scala
171 Scala 高阶函数
171 Scala 高阶函数
33 0
|
分布式计算 前端开发 Java
Scala高阶函数与akka 2
Scala高阶函数与akka
54 0
|
算法 Java 编译器
Scala高阶函数与akka 1
Scala高阶函数与akka
59 0
Scala快速入门-9-高阶函数
作为值的函数 创建匿名函数 带函数参数的函数 闭包 柯里化
|
分布式计算 Shell API
scala函数式编程与高阶函数
谈到编程方式有指令式编程、过程化编程、函数式编程,函数式编程在使用时主要的思想就是把运算过程写成一些列嵌套的函数调用。把一组数据通过函数实现运算转化成另一组数据。函数式编程这种方式在我们将来开发Spark、Flink的业务代码时会大量使用。下面列出了一些我们经常使用的进行函数式编程的Iterable trait(可迭代特质)方法。
80 0
|
SQL 分布式计算 Hadoop
Scala入门到精通——第十三节 高阶函数
本节主要内容 高阶函数简介 Scala中的常用高阶函数 SAM转换 函数柯里化 部分应用函数 1. 高阶函数简介 高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数);另外一种是返回值是函数的函数。这两种在本教程的第五节 函数与闭包中已经有所涉及,这里简单地回顾一下: (1)函数参数 //函数参数,即传入另一个函数的参数是函数 //((
3539 1
|
大数据 网络安全 Scala
大数据Scala系列之高阶函数
大数据Scala系列之高阶函数1.1. 概念如果一个函数的传入参数为函数或者返回值是函数,则该函数即为高阶函数。 1.2. 传入参数为函数Scala中,函数是头等公民,和数字一样。不仅可以调用,还可以在变量中存放函数,也可以作为参数传入函数,或者作为函数的返回值。
1033 0