Scala具有函数式编程语言中您期望的大多数功能,包括:
- Lambdas(匿名函数)
- 高阶函数 (HOFs)
- 标准库中的不可变集合
Lambdas(也称为 匿名函数)是保持代码简洁但可读性的重要组成部分。
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)
除了在整个标准库中使用的高阶函数外,您还可以创建自己的 高阶函数。
Contributors to this page:
Contents
- 导言
- Scala 3 特性
- 为什么是 Scala 3 ?
- Scala 的味道
- Hello, World!
- The REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 头等函数
- 单例对象
- 集合
- 上下文抽象
- 顶层定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 领域建模
- 函数式领域建模
- 方法
- 方法特性
- main 方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 扩展
- 高阶函数
- 自定义 map 函数
- 创建可以返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数是值
- 函数式错误处理
- 总结
- 类型和类型系统
- 类型推断
- 泛型
- 相交类型
- 联合类型
- 代数数据类型
- 型变
- 不透明类型
- 结构化类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- Given 实例和 Using 语句
- 上下文绑定
- Given 导入
- 实现类型类
- 多元相等性
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- worksheet
- 与 Java 交互
- 向 Java 开发者介绍Scala
- Scala for JavaScript Developers
- Scala for Python Developers
- 下一步去哪