美文网首页
函数闭包简单一例

函数闭包简单一例

作者: sidyph | 来源:发表于2018-08-10 11:12 被阅读0次

    一、问题的提出

    在生产中有时候会遇到这种情况:在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函数。

    相关文章

      网友评论

          本文标题:函数闭包简单一例

          本文链接:https://www.haomeiwen.com/subject/pvkkbftx.html