Map 是将给定函数应用于列表的每个元素的高阶函数。
这是地图的一个不常见的限制性定义。
无论如何,它之所以有效,是因为它是由不坚持这一点的人定义的。
例如,有人写了类似于
sealed trait Option[+A] {
def map[B](f: A => B): Option[B] = this match {
case Some(value) => Some(f(value))
case None => None
}
}
作为标准库的一部分。这使得地图适用于Option[A]
定义它是因为映射多种数据结构而不仅仅是列表是有意义的。映射是应用于数据结构所包含的元素的转换。
它对每个元素应用一个函数。
Option[A]可以认为是一个微不足道的序列。它要么有零个元素,要么有一个元素。映射它意味着将函数应用于其元素(如果它有一个)。
现在,一直使用此工具可能没有多大意义,但在某些情况下它很有用。
例如,它是少数几种不同的方法之一,当它们存在时,可以启用For Expressions对类型进行操作。Option[A]可用于方便的表达式。
例如
val option: Option[Int] = Some(2)
val squared: Option[Int] = for {
n <- option
if n % 2 == 0
} yield n * n
有趣的是,这意味着filter也被定义在Option[A].
如果您只有一个简单的值,那么使用不太通用的构造可能会更清楚。