所以,我是函数式编程的新手,我仍在努力消化基本原理。到目前为止,我可以理解,理想情况下,应该在没有可变变量、赋值、循环和其他命令式控制结构的情况下进行编码。所以我有一个问题。在以下两个代码片段之间:
def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = {
val temp = functionA(xRDD, yRDD)
functionB(temp, zRDD)
}
和
def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = {
functionB(functionA(xRDD, yRDD), zRDD)
}
我应该选择哪一个,为什么?我的猜测是第二个,因为它避免了将数据本地分配给临时值。这就是全部内容了吗?我做对了吗?我错过了什么吗?
最佳答案
两种方式都很好,但取决于使用哪种方式。
这两种方式都没有什么问题。您可以使用上述任何一种方式。但是,由于除了函数 B 之外,您没有在任何地方使用函数 A 返回的值。第二种方式看起来不错(没有额外的变量)。额外的变量不太重要(引用消耗的内存对于实际目的来说是微不足道的。)
误解
在函数式编程中赋值是可以的。重新分配是不行的。 在函数式编程中使用变量捕获结果是可以的。但使用 var 并重新分配 var 并不是函数式编程。
关于scala - 函数式编程原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40722589/