Scala 3 — 书籍

一类函数

语言

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 体验的一部分,这是你每天都会做的事情。

不可变集合

当你使用 ListVector 等不可变集合以及不可变 MapSet 类时,了解这些函数不会改变它们被调用的集合非常重要;相反,它们会返回一个包含更新数据的集合。因此,将它们以“流畅”的风格链接在一起以解决问题也很常见。

例如,此示例展示了如何对集合进行两次过滤,然后对剩余集合中的每个元素进行乘法

// 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)

除了在整个标准库中使用高阶函数之外,你还可以 创建你自己的

此页面的贡献者