Scala 具有函数式编程语言中你期望的大多数功能,包括
- Lambda(匿名函数)
- 高阶函数(HOF)
- 标准库中的不可变集合
Lambda,也称为匿名函数,是保持你的代码简洁但可读性的重要组成部分。
List
类的 map
方法是高阶函数的典型示例——将函数作为参数的函数。
这两个示例是等效的,并展示了如何通过将 lambda 传递到 map
方法中,将列表中的每个数字乘以 2
val a = List(1, 2, 3).map(i => i * 2) // List(2,4,6)
val b = List(1, 2, 3).map(_ * 2) // List(2,4,6)
这些示例还等效于以下代码,它使用 double
方法而不是 lambda
def double(i: Int): Int = i * 2
val a = List(1, 2, 3).map(i => double(i)) // List(2,4,6)
val b = List(1, 2, 3).map(double) // List(2,4,6)
如果你之前没有见过
map
方法,它会将给定的函数应用于列表中的每个元素,生成包含结果值的新列表。
将 lambda 传递给集合类(如 List
)上的高阶函数是 Scala 体验的一部分,这是你每天都会做的事情。
不可变集合
当你使用 List
、Vector
等不可变集合以及不可变 Map
和 Set
类时,了解这些函数不会改变它们被调用的集合非常重要;相反,它们会返回一个包含更新数据的集合。因此,将它们以“流畅”的风格链接在一起以解决问题也很常见。
例如,此示例展示了如何对集合进行两次过滤,然后对剩余集合中的每个元素进行乘法
// a sample list
val nums = (1 to 10).toList // List(1,2,3,4,5,6,7,8,9,10)
// methods can be chained together as needed
val x = nums.filter(_ > 3)
.filter(_ < 7)
.map(_ * 10)
// result: x == List(40, 50, 60)
除了在整个标准库中使用高阶函数之外,你还可以 创建你自己的。
此页面的贡献者
内容
- 简介
- Scala 特性
- 为什么选择 Scala 3?
- Scala 体验
- Hello, World!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一类函数
- 单例对象
- 集合
- 上下文抽象
- 顶层定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写你自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数是值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交叉类型
- 联合类型
- 代数数据类型
- 方差
- 不透明类型
- 结构类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文界限
- 给定导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发人员的 Scala
- 面向 JavaScript 开发人员的 Scala
- 面向 Python 开发人员的 Scala
- 下一步