当前位置:  开发笔记 > 编程语言 > 正文

更糟糕的罪恶:副作用还是传递大量物体?

如何解决《更糟糕的罪恶:副作用还是传递大量物体?》经验,为你挑选了2个好方法。

我在函数内部的循环中有一个函数.内部函数在内存中获取并存储大量数据(作为全局变量......我使用"R",类似于"S-Plus").循环遍历要获取的长数据列表.外部函数启动该过程并传入要获取的数据集列表.

for (dataset in list_of_datasets) {
  for (datachunk in dataset) {
    
    
  }
}

我编写了内部函数来存储每个数据集,然后移动到下一个数据集,因此外部函数的所有工作都作为全局变量的副作用发生...一个大禁忌.这比收集和返回一个巨大的,占用记忆的向量矢量更好还是更糟?是否有优越的第三种方法?

如果我将数据向量存储在数据库而不是内存中,答案会改变吗?理想情况下,我希望能够终止该功能(或由于网络超时而使其失败),而不会丢失在终止之前处理的所有信息.



1> Allen..:

在外部函数中使用变量而不是全局变量.这将为您提供两种方法中的最佳方法:您不会改变全局状态,也不会复制大量数据.如果您必须提前退出,只需返回部分结果.

(参见R手册中的"范围"部分:http://cran.r-project.org/doc/manuals/R-intro.html#Scope)



2> 小智..:

记住你的Knuth."过早的优化是所有编程邪恶的根源."

试试副作用免费版.看它是否符合您的性能目标.如果确实如此,那么首先你没有问题; 如果没有,那么使用副作用,并为下一个程序员注意你的手被迫.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有