Scala 代码:
for {
user <- users
name <- user.names
letter <- name.letters
} yield letter
我们可以将这种“列表理解”代码视为“函数式编程”风格吗?因为它们将被转换为 map
和 flatMap
函数?
最佳答案
是的,这绝对是一种函数式技术,特别是假设所有这些成员都是字段或纯函数。它只是 0 个或多个 flatMap
后跟 1 个 map
的语法糖(将 if
子句翻译为 withFilter
) 。
如果末尾没有 yield
,它的作用更像是命令式 for
,转换为 1 个或多个 foreach
; foreach
通常用于执行语句,因为它们有副作用。
This article更详细地描述了语法,this excellent answer通过一些单子(monad)理论更深入地讨论它,并且 this article明确描述实际规则翻译。
关于scala - "list comprehension"可以被视为 "functional programming"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908501/