我在 Scala 编程第 23.5 节中读到,map、flatMap 和 filter 操作总是可以转换为 for-comprehensions,反之亦然。
我们得到以下等价物:
def map[A, B](xs: List[A], f: A => B): List[B] =
for (x <- xs) yield f(x)
我有一个从一系列地图操作中计算出来的值:
val r = (1 to 100).map{ i => (1 to 100).map{i % _ == 0} }
.map{ _.foldLeft(false)(_^_) }
.map{ case true => "open"; case _ => "closed" }
我想知道这会是什么样的理解。我该如何翻译它?
(如果它有帮助,用文字来说是:
- 取 1 到 100 之间的整数
- 为每个,创建一个包含 100 个布尔值的列表
- 使用 XOR 运算符折叠每个列表,返回布尔值
- 根据布尔值产生 100 个字符串“打开”或“关闭”的列表
我想有一种标准的方法来翻译地图操作,其中实际功能的细节并不重要。不过我可能是错的。)