函数闭包简单一例

一、问题的提出

在生产中有时候会遇到这种情况:在N行代码中,只有中间的M行(M远远小于N)是变动的,这个时候我们就希望能够将中间的M行变化的部分提取出来,然后和N行代码中不变的部分进行组合使用。

例如下面这个案例:

图中红框部分的两个函数是属于M行代码,其余部分都是N行代码中不变的部分。

现在想要做到整个程序只执行collect_1day或者frm_to_dict.

如何实现?

图1 案例

二、分析

首先将不变的部分全部抽出是肯定需要的。但是这个可变的部分怎么办?不妨先暂用一个func的参数替换掉。

其次定义一个新的函数,这个函数调用了上面不变的函数,并且,在新函数里面再定义一个func函数,这个func函数和collect_1day函数发生关系,将collect_1day函数及参数全部打包在一起,这个功能就叫做闭包。

三、重构

重构后的函数见下图:

图2 重构后的函数

可以看到:

del_all_days函数是N行函数中不变的部分,func作为参数传给他,func函数传参的时候只穿函数名,而不带()

collect_frm函数里面定义的func函数参数与del_all_days函数中的func函数的参数保持一致。

func函数内部调用的其他函数如collect_1day函数的参数,直接取用的是外部函数collect_frm输入进来的参数.

del_all_days函数不需要frm_path、dict_path参数,因为二者在del_all_days函数中没有被调用,实际上是在collect_frm函数直接传给了collect_1day函数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,905评论 0 38
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • 那天因为凌晨下雨的缘故,去学校的那条弯弯曲曲的小路变得泥泞不堪。我生怕自己的鞋子沾上黄黄的泥土便小心翼翼的踮起脚来...
    Sea阿sea阅读 180评论 0 0
  • 感谢上苍 让我在最好的年纪 遇见最好的你 世界那么大,不怕来不及去看看 却怕来不及与你相知 初遇 你如那撑着油纸伞...
    lele兮兮阅读 102评论 0 0
  • 假若有生之年你也去过一次新疆,有很大可能,在之后的一段时间对其他地方再提不起什么兴趣。这便是新疆带给我的,最深切的...
    猫小多阅读 926评论 1 3