因此,我对函数式编程还是新手,我仍在努力消化这些基本原则。到目前为止,我可以理解,理想情况下,没有可变变量、赋值、循环和其他命令式控制结构的代码。所以我有个问题。在以下两个代码段之间:
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)
}我应该选哪一个?为什么?我的猜测是第二个,因为它避免了将数据本地分配给临时val。就这些吗?我做得对吗?我是不是遗漏了什么?
发布于 2016-11-21 14:36:43
这两种方式都是好的,但取决于选择哪一种。
这两种方式都没有错。您可以使用上述任何一种方法。但是,由于您没有使用functionA返回的值,所以除了在functionB中,其他任何地方都不使用。第二种方式看起来不错(没有额外的变量)。额外的变量不那么重要(引用所消耗的内存对于实际目的来说是微不足道的)。
误解
在函数式编程中,作业是可以的。重新分配是不可以的。在函数式编程中,使用变量捕获结果是可以的。但是使用var和重新分配var并不是函数编程。
发布于 2016-11-21 14:40:21
如果你能读一点书的话。https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html,您需要深入了解编译器理论,以了解导致变量的优缺点。
https://stackoverflow.com/questions/40722589
复制相似问题